问题描述
我想要一个 TSQL 语句将名称后缀(Jr、Sr.、IV 等)移动到另一个字段中.
我看到的后缀是JR SR I II III IV V
这是一个数据样本
<前>姓布朗宁二号伯奇二世布斯,JR.卡尼III克里斯蒂安,SR小科尔文牛郎,JR.我希望将后缀从姓氏字段移到另一个名为后缀的字段中.
<前>姓氏后缀布朗宁二号伯奇一世小布斯卡尼III克里斯蒂安 SR小科尔文小牛我使用的是 SQL Server 2005,可以使用 SQL# 函数.
任何帮助将不胜感激.
使用 SQL# 函数可能比这做得更好,但在直接的 T-SQL 中,您可以使用.
这里的主要思想是使用 REVERSE
和 PATINDEX
解析出名称中的最后一个段/标记,然后将其与已知后缀列表进行匹配.
首先是一些测试数据:
然后,一个内联 SELECT
版本.注意使用 NULLIF
来控制 SUBSTRING
错误.
或者,UPDATE
带有本地变量:
内联 SELECT
相当方便,但难以阅读和排除故障.我更喜欢带有本地变量的 UPDATE
用于以后可能需要返回的任何内容.此外,它还可以更轻松地应用单个编辑.
EDIT、SELECT
方法,稍作修改,并包含在内联表值函数中.内联 TVF 应该比标量 UDF 更有效,并且您可以获得多个返回值来启动.
I would like to have a TSQL Statement to move Name Suffix (Jr, Sr., IV, etc) into another field.
The suffixes I see are JR SR I II III IV V
Here is a sample of the data
LastName BRUNNING, II BURCH II BUSS, JR. CANI III CHRISTIAN,SR COLVIN Jr COWHERD,JR.
I would like the suffix moved out of the LastName field into another field called Suffix.
LastName Suffix BRUNNING II BURCH I BUSS JR CANI III CHRISTIAN SR COLVIN JR COWHERD JR
I am using SQL Server 2005 and can use SQL# functions.
Any help would be greatly appretiated.
You can probably do better than this using the SQL# functions, but in straight T-SQL, here you go.
The main idea here is to parse out the last segment/token in the name using REVERSE
and PATINDEX
, and then match it to a list of known suffixes.
First some test data:
Then, an inline SELECT
version. Notice the use of NULLIF
to control for SUBSTRING
errors.
Alternately, UPDATE
w/ local vars:
The inline SELECT
is fairly convenient, but difficult to read and troubleshoot. I prefer the UPDATE
with local vars for anything I might have to return to later. Plus, it makes individual edits easier to apply.
EDIT, SELECT
method, slightly edited, and wrapped in an inline table-valued function. A inline TVF should be more efficient than a scalar UDF, and you get multiple return values to boot.
这篇关于将名称后缀(Jr、Sr、IV 等)移动到另一个字段的 TSQL 语句的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!