【发布时间】:2018-09-12 14:08:06
【问题描述】:
我有一个从全名解析名字、中间名和姓氏的查询。
DECLARE @name VARCHAR(20) = 'martin'
SELECT first_name = (
CASE LEN(REPLACE(UPPER(@name), ' ', ''))
WHEN LEN(UPPER(@name)) - 1
THEN PARSENAME(REPLACE(UPPER(@name), ' ', '.'), 2)
ELSE PARSENAME(REPLACE(UPPER(@name), ' ', '.'), 3)
END
)
,mi = (
CASE LEN(REPLACE(UPPER(@name), ' ', ''))
WHEN LEN(UPPER(@name)) - 1
THEN NULL
ELSE PARSENAME(REPLACE(UPPER(@name), ' ', '.'), 2)
END
)
,last_name = (PARSENAME(REPLACE(UPPER(@name), ' ', '.'), 1))
所以问题是,当输入名字和姓氏时,这个查询可以正常工作。就像@name = 'Martin Joe' 工作正常。但是当输入是单个名称 @name = 'Martin' 时,它会将其设为姓氏并首先抛出 MI 为空。
当前输出:
@name = 'Martin'
First name - Null
MI - Null
Last name - Martin
期望的输出:
@name = 'Martin'
First name - Martin
MI - Null
Last name - Null
它应该将名字显示为'Martin,MI 和姓氏为空。有什么帮助吗?!
【问题讨论】:
-
遇到
@name = 'Smith'怎么办? -
@Rick Peter B 的观点是,在 那个 的情况下,你得到它作为姓氏的事实可能是正确的。多考虑您的要求。
-
你不知道你打开了什么样的蠕虫罐头。
-
SQL 中已经有一个关于名称的bunch of SO questions。但是,您更大的问题似乎是对名称的幼稚理解。不符合
First Middle Last模式的名称怎么办?在许多亚洲国家,姓氏是第一位的。在许多讲西班牙语的国家,一个人可以有多个姓氏(可能有也可能没有连字符——例如Jose Aruego Castilles Cervantes)。你读过kalzumeus.com/2010/06/17/…吗?
标签: sql sql-server