T-SQL SELECT语句在没有更新或变量的情况下(和)之间排除文本

时间:2013-03-12 00:07:57

标签: tsql

我想知道这是否可能,我有一组凌乱的名字数据可供使用,并且它由其他应用程序共享,因此我不想运行任何更新语句。但数据有时会包含一个AKA,如:

罗伯特(AKA Bob)

我正试图获得一个干净的数据,只是说“罗伯特”。

我想到的一种方法是使用临时表,然后使用CHARINDEX(和)然后替换(和)之间的内容。这似乎是一个漫长的方式来做到这一点。

有更聪明的方法吗?

编辑:更多数据地狱的例子。有时,括号出现在前面或混合起来,例如:

(比尔)威廉

理查德(迪克)Jr。

3 个答案:

答案 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