2012-04-17 134 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