我在查询结果为null但查询仍返回null时尝试显示00001
。我不知道我的查询有什么问题。
编辑:
假设OBRNo
123-5678-10-13-1619
表示LEN(a.OBRNo) is 19
SELECT TOP 1 CASE WHEN RIGHT(a.OBRNo, 5) = NULL THEN '00001' ELSE a.OBRNo
END as CaseWhen,
ISNULL(a.OBRNo, '00001') as ISNULL,
RIGHT(OBRNo, 5) as OrderBy
FROM tbl_T_BMSCurrentControl as a
WHERE LEN(a.OBRNo) = 20 and a.ActionCode = 1
ORDER BY OrderBy DESC
答案 0 :(得分:4)
使用NULL
/ IS NULL
与IS NOT NULL
进行比较,而不与= NULL
进行比较。
SELECT TOP 1 CASE WHEN RIGHT(a.OBRNo, 5) IS NULL THEN '00001' ELSE a.OBRNo END
...
您可以使用SET ANSI_NULLS
更改此行为。
默认情况下,您无法与=进行比较的原因是:NULL
表示未定义。没有任何东西等于未知,甚至不是NULL
。如果您与NULL
进行比较,则结果未知,因此NULL
。
答案 1 :(得分:1)
您的查询是否返回任何行?
您的ISNULL (x,y)
应该按预期执行,但由于WHERE
,您的NULLS
似乎正在过滤所有记录。
试试这个:
SELECT TOP 1 CASE WHEN RIGHT(a.OBRNo, 5) = NULL THEN '00001' ELSE a.OBRNo
END as CaseWhen,
ISNULL(a.OBRNo, '00001') as ISNULL,
RIGHT(OBRNo, 5) as OrderBy
FROM tbl_T_BMSCurrentControl as a
WHERE (a.OBRNo IS NULL OR LEN(a.OBRNo) = 20) and a.ActionCode = 1
ORDER BY OrderBy DESC
LEN(a.OBRNo)
a.OBRNo NULL
将为NULL
,因此NULL = 20
将为NULL
而NULL AND a.ActionCode = 1
将为NULL
被视为FALSE