是否有简单的方法可以获取非1
列的NULL
和0
列的NULL
(例如,一个SELECT
),没有添加标量函数来做它?
答案 0 :(得分:2)
我的第一个选择是OP已经发布的答案,但另一种选择是
select isnull(column * 0 + 1, 0)
基本上,如果column
不是NULL
,则column * 0 + 1
将为1
,否则为NULL
。我假设column
是一个整数列,如问题评论中所述,但只要您有一个转换该类型的函数,它就可用于任何类型到一个整数(当且仅当它的输入是)时返回NULL
。
它与Jayvee的答案在精神上相似,但避免任何除零的问题,并且应该更容易理解。
答案 1 :(得分:1)
三个基本选项:
CASE WHEN
:
CASE WHEN [TheColumn] IS NULL THEN 0 ELSE 1 END AS [MyFlag]
或者如果您想将其作为BIT
:
CAST(CASE WHEN [TheColumn] IS NULL THEN 0 ELSE 1 END AS BIT) AS [MyFlag]
是否"简单"是一个意见问题......
如果您知道非NULL
值永远不会是0
(对于INT
列)或'FALSE'
(对于CAST(COALESCE([TheColumn], 0) AS BIT) AS [MyFlag]
一个字符列),你可以缩短一点:
0
...但请再次注意关于'FALSE'
/ IIF
的假设。
在SQL Server 2012+上,您可以使用IIF(TheColumn IS NULL, 0, 1) AS [MyFlag]
(谢谢,Martin Smith):
{{1}}
答案 2 :(得分:0)
select isnull(ascii([TheColumn])/ascii([TheColumn]),0)