最近我遇到了Timestamp.toString("dd/MM/yyyy HH:mm")
函数在第一个字符串为空时返回截断数据的情况。
ISNULL
我发现a是5个字符,b是10个字符,但是当a为空时,它只返回5个字符b而不是全长。
这是一个已知问题吗?
答案 0 :(得分:8)
这是一种已知的行为
来自 MSDN
如果不是NULL,则返回check_expression的值; 否则,在隐式地返回replacement_value 如果类型不同,则转换为check_expression的类型。 如果replacement_value超过,则replacement_value可以被截断 check_expression。
使用COALESCE
来解决此问题
SELECT COALESCE(a, b) From yourtable
这是一个演示
CREATE TABLE #nulltest
(
a CHAR(5),
b CHAR(10)
)
INSERT INTO #nulltest
VALUES ('12345','1234567890'),
(NULL,'1234567890')
SELECT a,
b,
ISNULL(a, b) AS Isnull_Result,
COALESCE(a, b) AS Coalesce_Result
FROM #nulltest
结果:
╔═══════╦════════════╦═══════════════╦═════════════════╗
║ a ║ b ║ Isnull_Result ║ Coalesce_Result ║
╠═══════╬════════════╬═══════════════╬═════════════════╣
║ 12345 ║ 1234567890 ║ 12345 ║ 12345 ║
║ NULL ║ 1234567890 ║ 12345 ║ 1234567890 ║
╚═══════╩════════════╩═══════════════╩═════════════════╝
答案 1 :(得分:0)
除了@Prdp回答之外,你还可以使用CASE WHEN。
CASE WHEN a is null then b else a end AS caseWhen_Result