SQL Server用空字符串替换null

时间:2016-08-20 08:39:12

标签: sql-server

我需要知道我使用什么SQL语句来生成输出,如果一个单元格包含null,那么它会从它旁边的列中提取信息。

更好地解释:我有三个表,表1包含7列,表2包含6列,表3包含4列。

我需要从表1中选择1列,然后选择一个破折号,然后从另一个表中选择3列,后跟破折号,然后从另一个表中选择另一列,但是如果列中包含null,则必须将值替换为破折号' - '。

这是我到目前为止的代码:

idx >= maxlimit

我确实尝试过:

SELECT 
    Episode_Name, '-', Pnr_FName, Pnr_LName, Guest, '-', Car_Make
FROM 
    EPISODES, PRESENTERS, CARS

我将它绑定在(CASE WHEN Guest = null THEN '' END EPISODE) 语句中,但它不起作用。

任何帮助将不胜感激!感谢

2 个答案:

答案 0 :(得分:1)

您无法使用NULL运算符检查=的列值,因为结果也是NULL。相反,您应该使用IS NULLIS NOT NULL。但出于可读性考虑,我会使用COALESCE代替CASE语句。

使用COALESCE

SELECT CONCAT(COALESCE(Episode_Name, ' '),
              '-',
              COALESCE(Pnr_FName, ' '),
              COALESCE(Pnr_LName, ' '),
              COALESCE(Guest, ' '),
              '-',
              COALESCE(Car_Make, ' '))
FROM EPISODES, PRESENTERS, CARS

顺便说一下,您应该使用显式连接语法,而不是在FROM子句中使用逗号,例如。

FROM EPISODES e INNER JOIN PRESENTERS p
    ON e.col = p.col

答案 1 :(得分:0)

  

我确实尝试过:(如果客人= null那么'' END EPISODE)

case when guest is null then '' end 

您无法比较空值,要检查是否存在空值,您必须使用IS NULL ..