【发布时间】:2012-09-18 22:32:38
【问题描述】:
我正在尝试解开一个非常古老的变量。这是在一个字段中输入的全名,可在两个单独的表中找到。在大多数较新的地方,名称位于三个逻辑列中,第一、中间、最后。在这些中,它们都在一起,我试图将其剥离为第一个首字母,姓氏。我在这里找到以下内容并对其进行了修改:
http://dbaspot.com/sqlserver-programming/365656-find-last-word-string.html
DECLARE @full_name VARCHAR(20)
DECLARE @fullname VARCHAR(20)
SELECT @full_name = REVERSE('John A Test')
SELECT @fullname = REVERSE('Joe Q Public')
SELECT @final = ISNULL(
(right(@full_name,1) + '. ' + (REVERSE(SUBSTRING(@full_name, 1,
CHARINDEX(' ',@full_name) - 1)))),
(right(@fullname,1) + '. ' + (REVERSE(SUBSTRING(@fullname, 1,
CHARINDEX(' ',@fullname) - 1 ))))
)
当我将 full_name 留在那里时,它可以正常工作...返回 J. Test。当我将其设为空时,默认值应为J. Public,但最终为.。当我分别测试每条线时,它们会起作用。我也尝试了 COALESCE,结果相同。 ISNULL 或 ???? 的括号太多了
【问题讨论】:
-
我怀疑是因为“条件太长”。这将(或应该)从服务器产生一个很好的解释。
-
我不这么认为,因为它确实给了我一个答案。只是不是我所期待的。它应该工作......?