如果不是<> NULL然后“xxxField”等于'1'

时间:2014-02-18 13:27:17

标签: sql sql-server-2008

我觉得这是一个相当简单的问题。我需要在SELECT语句中编辑一行,以查看字段中是否存在NULL的值。如果有NULL值,我需要新列(未命名)为该行显示“0”。如果行有数据,我需要在该行中显示“1”。有没有办法在不大幅修改我的逻辑的情况下做到这一点? (使用SQL Server Management Studio)

以下是代码:

    SELECT DISTINCT t.Name,
    CONVERT(VARCHAR(10), t.DischargeDateTime, 120) AS DischargeDate,
    t.PatientPortalEnabled,
    t.Allergy,
    CONVERT(VARCHAR(10), t.AllergyUpdateTime, 120) AS AllergyUpdate,
    /*This is where I would like to put the logic if possible*/ <> NULL,
    t.ElapseTimeForAllergyUpdateInMinutes,
    t.OldValue,
    t.NewValue,
    t.ElapseTimeForAllergyUpdateInHours,
    t.DischargeDateTime

3 个答案:

答案 0 :(得分:1)

试试这个:

CASE WHEN MyField IS NULL THEN 0 ELSE 1 END

这是在你的代码中:

SELECT DISTINCT t.Name,
CONVERT(VARCHAR(10), t.DischargeDateTime, 120) AS DischargeDate,
t.PatientPortalEnabled,
t.Allergy,
CONVERT(VARCHAR(10), t.AllergyUpdateTime, 120) AS AllergyUpdate,
CASE WHEN t.MyField IS NULL THEN 0 ELSE 1 END,
t.ElapseTimeForAllergyUpdateInMinutes,
t.OldValue,
t.NewValue,
t.ElapseTimeForAllergyUpdateInHours,
t.DischargeDateTime

答案 1 :(得分:1)

您可以使用CASE声明执行此操作。

SELECT DISTINCT t.Name,
CONVERT(VARCHAR(10), t.DischargeDateTime, 120) AS DischargeDate,
t.PatientPortalEnabled,
t.Allergy,
CONVERT(VARCHAR(10), t.AllergyUpdateTime, 120) AS AllergyUpdate,
/*This is where I would like to put the logic if possible*/
CASE
    WHEN t.MyField IS NULL THEN 0
    ELSE 1
END AS MyNewField,
t.ElapseTimeForAllergyUpdateInMinutes,
t.OldValue,
t.NewValue,
t.ElapseTimeForAllergyUpdateInHours,
t.DischargeDateTime

答案 2 :(得分:0)

使用XOR按位运算符:

declare @x int = null
select isnull((@x ^ @x),-1)+1