以下是我试图操纵的数据。我想在第二个逗号之前得到姓氏和名字
这是我目前的代码:
SELECT
[SDN_Name],
CASE WHEN CHARINDEX(', ', [SDN_Name]) > 0 THEN
LEFT([SDN_Name],(CHARINDEX(', ',[SDN_Name],1)-1))
ELSE
[SDN_Name]
END as LName,
CASE WHEN CHARINDEX(', ', [SDN_Name]) > 0 THEN
SUBSTRING([SDN_Name],CHARINDEX(', ',[SDN_Name])+1, ( LEN([SDN_Name]) - CHARINDEX(', ',[SDN_Name])+1))
ELSE
NULL
END as FName
FROM [分期]。[OFAC]。[TP1] 其中([SDN_Type] ='个人')
例如,如果全名是DELOS REYES,Feliciano,Jr。 我想要DELOS REYES作为LName 和Feliciano Semborio作为Fname 但我不想捕捉“,小。”
我能够解析第一个逗号的姓氏和所有内容。 如何编写一个CASEstatment,它将捕获没有名称后缀的名字?
答案 0 :(得分:0)
这些是SDN_Name字段中的逗号,对吗?只需使用','而不是''的 CharIndex ,它应该可以使用。像这样:
SELECT [SDN_Name],
CASE WHEN CHARINDEX(', ', [SDN_Name]) > 0 THEN
LEFT([SDN_Name],CHARINDEX(', ',[SDN_Name])-1)
ELSE
[SDN_Name]
END as LName,
CASE WHEN CHARINDEX(', ', [SDN_Name]) > 0 THEN
SUBSTRING([SDN_Name], CHARINDEX(', ',[SDN_Name])+2,
CASE WHEN RIGHT([SDN_Name], 1) = '.' THEN LEN([SDN_Name]-2) ELSE LEN([SDN_Name]) END
- (2+CHARINDEX(', ',[SDN_NAME],1))
)
ELSE
NULL
END as FName