将可能为NULL的值简单转换为标志

时间:2014-05-31 14:19:30

标签: sql sql-server tsql

是否有简单的方法可以获取非1列的NULL0列的NULL(例如,一个SELECT),没有添加标量函数来做它?

3 个答案:

答案 0 :(得分:2)

我的第一个选择是OP已经发布的答案,但另一种选择是

select isnull(column * 0 + 1, 0)

基本上,如果column不是NULL,则column * 0 + 1将为1,否则为NULL。我假设column是一个整数列,如问题评论中所述,但只要您有一个转换该类型的函数,它就可用于任何类型到一个整数(当且仅当它的输入是)时返回NULL

它与Jayvee的答案在精神上相似,但避免任何除零的问题,并且应该更容易理解。

答案 1 :(得分: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]
    

    是否"简单"是一个意见问题......

  2. 如果您知道非NULL值永远不会是0(对于INT列)或'FALSE'(对于CAST(COALESCE([TheColumn], 0) AS BIT) AS [MyFlag] 一个字符列),你可以缩短一点:

    0

    ...但请再次注意关于'FALSE' / IIF的假设。

  3. 在SQL Server 2012+上,您可以使用IIF(TheColumn IS NULL, 0, 1) AS [MyFlag] (谢谢,Martin Smith

    {{1}}

答案 2 :(得分:0)

另一种方式:

select isnull(ascii([TheColumn])/ascii([TheColumn]),0)