我想知道这是否可能,我有一组凌乱的名字数据可供使用,并且它由其他应用程序共享,所以我不想运行任何更新语句。但数据有时会包含一个 AKA,例如:
罗伯特(又名鲍勃)
我正在尝试获取一个干净的数据,其中只显示“罗伯特”。
我想到的一种方法是使用临时表,然后使用 CHARINDEX 表示 ( 和 ),然后替换 ( 和 ) 之间的内容。这似乎是一个冗长的方法。
有没有更聪明的方法?
编辑:数据地狱的更多例子。有时括号出现在前面或混淆,例如:
(比尔)威廉
小理查德(迪克)
我想知道这是否可能,我有一组凌乱的名字数据可供使用,并且它由其他应用程序共享,所以我不想运行任何更新语句。但数据有时会包含一个 AKA,例如:
罗伯特(又名鲍勃)
我正在尝试获取一个干净的数据,其中只显示“罗伯特”。
我想到的一种方法是使用临时表,然后使用 CHARINDEX 表示 ( 和 ),然后替换 ( 和 ) 之间的内容。这似乎是一个冗长的方法。
有没有更聪明的方法?
编辑:数据地狱的更多例子。有时括号出现在前面或混淆,例如:
(比尔)威廉
小理查德(迪克)
未经测试:
FirstName = case when charindex('(AKA', FirstName) = 0
then FirstName
else substring(FirstName, 1, charindex('(AKA', FirstName)) end
如果嘈杂的字符串模式不可预测,最好使用 SQL CLR TVF(表值函数),使用 C# 代码正则表达式。以 xml 作为输入参数,其中包含您需要处理的数据,返回已处理数据的表。
彼得让球为我滚动!感谢您让我开始走上正轨!
SELECT
CASE WHEN FirstName like '%)%'
THEN REPLACE(FirstName,
SUBSTRING(FirstName,CHARINDEX('(',FirstName),CHARINDEX(')',FirstName)-CHARINDEX('(',FirstName)+1),'')
ELSE FirstName END