2012-04-17 140 views
-1

enter image description here檢查列是否包含模式?

我正在寫一個查詢來獲取從user_name_n列FNAME在下面我用pathindex找到空間查詢作爲'% %'傳遞一個pathindex返回值到左 並能正常工作,但我已經與記錄,也我怎麼能寫一個查詢 也將照顧,

和一些記錄如Bellian沒有space or ,但我仍然希望它們在名稱 但它不適用於以下查詢。

SELECT top 100 user_name_n,left(user_name_n,(patindex('% %',user_name_n))) 
from SFCHA10_04_02_2012; 

誰能告訴我如何達到預期的效果。

+0

看起來第一個名字是在逗號後面(當有逗號時),但名字在空格之前(當有空格時)。 – 2012-04-17 12:14:16

+0

@downvoter感謝您的慷慨。 – 2012-04-18 04:25:36

回答

2
Select user_name_n, 
     left(user_name_n,patindex('%[, ]%',user_name_n + ' ')-1) 
From SFCHA10_04_02_2012; 

注意您可以使用'%[,]%'來搜索空格或逗號。另請注意,我爲第二個參數添加了一個+''。即使數據不包含空格,這也會導致匹配。

1
SELECT TOP (100) user_name_n, 
    SUBSTRING(
     user_name_n, 
     COALESCE(CHARINDEX(',',user_name_n)+1,1), 
     COALESCE(NULLIF(CHARINDEX(' ',user_name_n),0),255)) 
from SFCHA10_04_02_2012; 

如果你想最後一個名稱,而不是第一個名字時,有形式lname,fname逗號(不知道爲什麼這個奇怪的要求),則:

SELECT TOP (100) user_name_n, 
    SUBSTRING(user_name_n, 1, 
    COALESCE(NULLIF(CHARINDEX(',',user_name_n)-1,-1), 
     NULLIF(CHARINDEX(' ',user_name_n),0),255)) 
from SFCHA10_04_02_2012; 
+0

它適用於''''但不與','它給出33,34,35的姓氏,它已經返回Carol,Ryan,Shannon,我想要Brown,Wilkey。 – 2012-04-17 12:05:30

+0

當有逗號時,你想要姓氏嗎?爲什麼? Carol,Ryan和Shannon不是第一個名字嗎? – 2012-04-17 12:16:00

+0

只有逗號時沒有fname,但當你的查詢包含','時,你的查詢會給出姓氏; – 2012-04-17 12:21:10

0

所以首先你更換一個CTE 昏迷和點白色空間和你從一開始就削減名字空間的第一次出現(或在情況下,整個長度沒有空格):

with aux_query as(
select 
replace(REPLACE(user_name_n,',',' '),'.',' ') as name 
from SFCHA10_04_02_2012 
) 
select SUBSTRING (name,1, case CHARINDEX(' ',name) when null then LEN(name) else LEN(name) end) 
from aux_query 
+1

迭戈..你能夠至少寫幾句話來解釋你的動機嗎?什麼是myTAble?什麼是mystring? aux_query中的'name'字段應該與user_name_n相同嗎? – deutschZuid 2012-04-17 22:01:39

+0

謝謝(再次)詹姆斯。我當然創建了一個表來測試,我稱之爲mytable。發佈答案時,我忘記將名稱更改回原件。 Goo coment – Diego 2012-04-17 23:12:00