我写了一个类似这样的T-SQL语句(最初的看起来不同,但我想在这里给出一个简单的例子):
SELECT first_name +
CASE last_name WHEN null THEN 'Max' ELSE 'Peter' END AS Name
FROM dbo.person
此语句没有任何语法错误,但case-clause总是选择else部分-如果last_name为空也是如此。但是为什么呢?
我想做的是联合first_name和last_name,但如果last_name为空,整个名称变成空:
SELECT first_name +
CASE last_name WHEN null THEN '' ELSE ' ' + last_name END AS Name
FROM dbo.person
你知道问题出在哪里吗?
当你在尝试时感到沮丧时:
CASE WHEN last_name IS NULL THEN '' ELSE ' '+last_name END
试试这个吧:
CASE LEN(ISNULL(last_Name,''))
WHEN 0 THEN ''
ELSE ' ' + last_name
END AS newlastName
LEN(ISNULL(last_Name, "))测量该列中的字符数,无论该列是空的还是空的,都将为零,因此WHEN 0 THEN将计算为true并返回“如预期的那样”。
我希望这是一个有用的替代方案。
我已经包含了sql server 2008及以上版本的测试用例:
DECLARE @last_Name varchar(50) = NULL
SELECT
CASE LEN(ISNULL(@last_Name,''))
WHEN 0 THEN ''
ELSE 'A ' + @last_name
END AS newlastName
SET @last_Name = 'LastName'
SELECT
CASE LEN(ISNULL(@last_Name,''))
WHEN 0 THEN ''
ELSE 'A ' + @last_name
END AS newlastName
当你在尝试时感到沮丧时:
CASE WHEN last_name IS NULL THEN '' ELSE ' '+last_name END
试试这个吧:
CASE LEN(ISNULL(last_Name,''))
WHEN 0 THEN ''
ELSE ' ' + last_name
END AS newlastName
LEN(ISNULL(last_Name, "))测量该列中的字符数,无论该列是空的还是空的,都将为零,因此WHEN 0 THEN将计算为true并返回“如预期的那样”。
我希望这是一个有用的替代方案。
我已经包含了sql server 2008及以上版本的测试用例:
DECLARE @last_Name varchar(50) = NULL
SELECT
CASE LEN(ISNULL(@last_Name,''))
WHEN 0 THEN ''
ELSE 'A ' + @last_name
END AS newlastName
SET @last_Name = 'LastName'
SELECT
CASE LEN(ISNULL(@last_Name,''))
WHEN 0 THEN ''
ELSE 'A ' + @last_name
END AS newlastName