非常に古い変数のマングルを解除しようとしています。それは 1 つのフィールドにすべて入力された氏名であり、2 つの別々のテーブルにあります。ほとんどの新しい場所では、名前は 3 つの論理列 (first、middle、last) にあります。これらはすべて一緒であり、私はそれを最初のイニシャル、姓に取り除こうとしています. ここで以下を見つけて修正しました。
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 または ???? に対して括弧が多すぎますか?