我正在运行一个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 |
答案 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)
您可以将nullif
和cast
用于此
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