-1

在此处输入图像描述

我正在编写一个查询以在以下查询中从 user_name_n 列中获取 fname 我正在使用 pathindex 来查找空间,因为'% %'将 pathindex 返回值传递给左侧并且它工作正常,但我还记录了,如何编写一个查询也照顾,

有些记录像Bellian没有,space or ,但我仍然希望它们在 fname 中,但它不适用于以下查询。

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

谁能告诉我如何才能达到预期的效果。

4

3 回答 3

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

请注意,您可以使用 '%[, ]%' 来搜索空格或逗号。另请注意,我在第二个参数中添加了 + ' '。即使数据不包含空格,这也会导致匹配。

于 2012-04-17T12:13:25.473 回答
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;
于 2012-04-17T11:58:08.707 回答
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
于 2012-04-17T12:22:04.017 回答