使用SQL将<sql server =“”> DOB和Age字段显示为空白

时间:2015-09-02 11:38:16

标签: sql sql-server

我正在运行一个SQL查询,我试图让DOB和Age字段为空('')而不是NULL

我设法使用ISNULL函数将DOB从1900-01-01更改为''。最初我的DOB是

SELECT isnull(DOB,'') DOB

带回1900-01-01而不是NULL

使用下面的代码,Age字段显示为'0'而不是''。我不确定如何使用ISNULL函数,因为db表中不存在Age字段。

SELECT ISNULL(CASE WHEN CONVERT(DATE, DOB) = '1900-01-01' THEN ''
                   ELSE CONVERT(CHAR(10), DOB, 103) END, '') AS DOB, 
       ISNULL (DATEDIFF(hour,dob,GETDATE())/8766,'')Age,

非常感谢任何帮助,谢谢:)

该表的一些虚拟数据:

ID | Name |Address |DOB         | Gender | Email        |
---------------------------------------------------------
01 | Max  |Abc Road| 2000-12-19 | Male   |Max@mail.net  |
02 | Sam  |TBH Road| null       | Male   |Sam@mail.net  |

这就是我的查询

ID | Name |Address |DOB        | Age  | Email        |
---------------------------------------------------------
01 | Max  |Abc Road|2000-12-19 | 15   |Max@Gmail.net |
02 | Sam  |TBH Road|           | 0    |Sam@Gmail.net |

但我想得到的是:

ID | Name |Address |DOB        | Age  | Email        |
---------------------------------------------------------
01 | Max  |Abc Road|2000-12-19 | 15   |Max@Gmail.net |
02 | Sam  |TBH Road|           |      |Sam@Gmail.net |

4 个答案:

答案 0 :(得分:0)

您可以使用简单的CASE语句。

case
    when dob = ''
        then ''
    else datediff(hour, dob, getdate())/8766
end as [Age]

尽管如此,这可能是一种更优雅的方式。

答案 1 :(得分:0)

你需要将另一个转换为varchar,因为它是以int形式出现然后该列的所有其他情况都将作为int,如果你没有提到任何它将默认为0

所以需要将所有输出更改为varchar()

WKInterfaceTable

答案 2 :(得分:0)

这是你的年龄:

DATEDIFF(hour,dob,GETDATE())/8766

这是一个数字。要使其成为字符串,请执行以下操作:

cast(DATEDIFF(hour,dob,GETDATE())/8766 as varchar (15))

然后你可以使用isnull,因为你的数据类型是相同的

isnull(cast(DATEDIFF(hour,dob,GETDATE())/8766 as varchar (15)), '')

答案 3 :(得分:0)

您可以将nullifcast用于此

 select ISNULL(CONVERT(CHAR(10), nullif(DOB,'1900-01-01'), 103),'')  as DOB,
 isnull(cast(DATEDIFF(hour,nullif(DOB,'1900-01-01'),GETDATE())/8766 as varchar),'') Age