sql - 检查并更改 SQL 中列的空值或 null 值?

标签 sql sql-server sql-server-2008-r2

当列文本为空或 null 时,如何更改“不存在”?

我的查询:

 Select TOP 1  ISNULL(NULLIF(DR.Name,''),'Not Exists') as Name,

   DR.Name as Name ,Coalesce(NullIf(rtrim(DR.Name),''),'Not Exist') as Name,
   Name = case when DR.Name is null then 'Not Exists' 
   when DR.Name='' then 'Not Exists' else DR.Name  end 
   from Transfer TR 
   join Driver DR on DR.OID=TR.DriverID 
   WHERE TR.TruckID=51 AND  TR.Statues<>7 and  TR.DateScheduled<GETDATE()
   AND TR.DateScheduled>=DATEADD(DAY,-7,GETDATE()) ORDER BY TR.OID DESC

结果:
enter image description here

最佳答案

如果您只需要单个列,那么您可以使用子选择,这样当查询没有返回任何行时,您仍然会得到不存在:

SELECT  Name = ISNULL(( SELECT  TOP 1 NULLIF(DR.Name,'')
                        FROM    Transfer AS TR 
                                INNER JOIN Driver AS DR 
                                    ON DR.OID = TR.DriverID 
                        WHERE   TR.TruckID = 51 
                        AND     TR.Statues <> 7 
                        AND     TR.DateScheduled < GETDATE()
                        AND     TR.DateScheduled >= DATEADD(DAY, -7, GETDATE()) 
                        ORDER BY TR.OID DESC), 'Not Exists');

如果您需要多列,那么您可以将 Not Exists 记录合并到查询底部,将所有这些放入子查询中,然后再次选择前 1 个列,确保您的实际值优先(通过添加列 SortOrder):

SELECT  TOP 1 Name, SomeOtherColumn
FROM    (   SELECT  TOP 1 
                    Name = NULLIF(DR.Name,''),
                    SomeOtherColumn,
                    SortOrder = 0
            FROM    Transfer AS TR 
                    INNER JOIN Driver AS DR 
                        ON DR.OID = TR.DriverID 
            WHERE   TR.TruckID = 51 
            AND     TR.Statues <> 7 
            AND     TR.DateScheduled < GETDATE()
            AND     TR.DateScheduled >= DATEADD(DAY, -7, GETDATE()) 
            ORDER BY TR.OID DESC
            UNION ALL
            SELECT  'Not Exists', NULL, 1
        ) AS t
ORDER BY SortOrder;

关于sql - 检查并更改 SQL 中列的空值或 null 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26993726/

相关文章:

mysql - SQL AI 索引在插入失败时增加是否有任何特殊原因?

mysql - 如何 SQL 选择一对多关系并合并输出

sql - 获取最近 3 年每个月的最大值以选择记录月份

c# - 在 C# Web 应用程序中插入查询超时,从 SQL Server Management Studio 运行正常

sql - 用 join 替换 varchar(max) 字段中的值

sql-server-2008-r2 - SCOPE_IDENTITY 回读

mysql - 同一张表上的多个 JOIN

php - 撇号 (') 转换为 �

sql - 如何与其他表同时创建一个表以从每个表中提取总计?

database - 具有 1500 万行性能的 SQL 表