我想知道这是否可能,我有一组凌乱的名字数据可供使用,并且它由其他应用程序共享,因此我不想运行任何更新语句。但数据有时会包含一个AKA,如:
罗伯特(AKA Bob)我正试图获得一个干净的数据,只是说“罗伯特”。
我想到的一种方法是使用临时表,然后使用CHARINDEX(和)然后替换(和)之间的内容。这似乎是一个漫长的方式来做到这一点。
有更聪明的方法吗?
编辑:更多数据地狱的例子。有时,括号出现在前面或混合起来,例如:
(比尔)威廉理查德(迪克)Jr。
答案 0 :(得分:1)
未经测试:
FirstName = case when charindex('(AKA', FirstName) = 0
then FirstName
else substring(FirstName, 1, charindex('(AKA', FirstName)) end
答案 1 :(得分:0)
如果噪声字符串模式不可预测,最好使用SQL CLR TVF(表值函数),使用C#代码正则表达式。将xml作为输入参数(包括需要处理的数据),返回一个处理了数据的表。
答案 2 :(得分:-1)
SELECT
CASE WHEN FirstName like '%)%'
THEN REPLACE(FirstName,
SUBSTRING(FirstName,CHARINDEX('(',FirstName),CHARINDEX(')',FirstName)-CHARINDEX('(',FirstName)+1),'')
ELSE FirstName END