将名称的中间值删除到其他列中

时间:2018-09-10 11:06:03

标签: sql sql-server

我一直在努力在MS SQL Server中将一些名称拆分为几列,剩下的只是一个姓氏和一个中间值(John Smith of Smithsons)

这就是我想做的,我有几个例子:

of Holland
Of the Clothson, 
England, from

因此,我有3种变体,可以放在字符串中的任意位置。我想做的是从“姓氏”列中删除这些值,然后将它们移到“中间”列中,这样我就可以了,

LastName|Amidst
--------------
Holland |of
clothson|of the
England |from

什么是最好的方法?是否可以将我要选择的值移到表中并从中进行引用?我不确定这是否可能。

1 个答案:

答案 0 :(得分:1)

根据您的描述,巨大的case表达式可能是最好的方法:

select (case when col like '% of the%'
             then ltrim(rtrim(replace(col, ' of the', '')))
             when col like '% of%'
             then ltrim(rtrim(replace(col, ' of', '')))
             when col like '% from%'
             then ltrim(rtrim(replace(col, ' from', '')))
             else col
        end) as new_col,
       (case when col like '% of the%'
             then 'of the'
             when col like '% of%'
             then 'of'
             when col like '% from%'
             then 'from'
        end) as new_midst