我正在编写一个查询,以便在以下查询中从user_name_n列获取fname我正在使用pathindex查找空格'% %'
将该pathindex返回值传递给left
它工作正常,但我用,
记录了如何编写查询
这也将照顾,
。
和Bellian
之类的某些记录没有space or ,
,但我仍然希望它们在fname中
但它不适用于以下查询。
SELECT top 100 user_name_n,left(user_name_n,(patindex('% %',user_name_n)))
from SFCHA10_04_02_2012;
任何人都可以告诉我如何才能达到预期的效果。
答案 0 :(得分:2)
Select user_name_n,
left(user_name_n,patindex('%[, ]%',user_name_n + ' ')-1)
From SFCHA10_04_02_2012;
请注意,您可以使用'%[,]%'来搜索空格或逗号。另请注意,我在第二个参数中添加了+''。即使数据不包含空格,也会导致匹配。
答案 1 :(得分: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;
答案 2 :(得分: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