2017-08-22 15 views
1

目前,我有以下代码:SQL日期返程如果null,则空白

CASE WHEN CONVERT(DATE, BirthDateTime) IS NULL THEN '' END AS DOB, 
CASE WHEN CONVERT(DATE, ServiceDateTime) IS NULL THEN '' END AS [Admission Date], 
CASE WHEN CONVERT(DATE, DischargeDateTime) IS NULL THEN '' END AS [Discharge Date], 

它返回:

enter image description here

什么是日期仍要转换为日期的最佳方法(原字段是日期时间),如果它是空然后返回空白或''

在此先感谢!

+1

你正在使用哪些DBMS?当你编写你的问题并添加了SQL标签时,向你展示了一个大框,这表明你还为特定DBMS添加了一个标签,因为它们之间的语法和功能不同。你为什么决定忽略这个建议? –

+0

ISNULL(COLUMNNAME,'')在sql server中,并检查出coalesce以及学习目的。 – Amit

+0

你正在使用哪些DBMS? ---我不明白。 SQL Server 2012? – cmpmd2

回答

1

在SQL Server:

既然你想用一个空字符串代替null,那么你将要转换为字符串。你可以沿着使用的10大小与样式120返回ISO格式(没有时间部分),像这样:

select 
    dob = isnull(convert(varchar(10),BirthDateTime,120),'') 
    , [Admission Date] = isnull(convert(varchar(10),ServiceDateTime,120),'') 
    , [Discharge Date] = isnull(convert(varchar(10),DischargeDateTime,120),'') 
from ... 

您可以找到其他风格的代码convert()这里:docs: cast and convert

+0

我会改变一件事 - 使用'char(10)'而不是'varchar(10)',因为它是一个固定的长度。 –

+0

@ZoharPeled通常我会,但是因为'null'被转换为空字符串,并且转换会将空字符串更改为10个空格......我只是不喜欢我的结果集中的一堆空格字符而不是一个空字符串。 – SqlZim

+0

好点,我没有想过。 –

0

你可以使用合并。列必须始终有一种类型,无论行的,所以你必须给它传递到合并之前,你的约会对象类型转换为文本类型:

COALESCE(CONVERT(VARCHAR(100), BirthDateTime), '') AS DOB, 
0

对于SQL Server

SELECT ISNULL(DOB,'') AS DOB FROM TABLE 
+1

这不起作用,'isnull'的两个参数都必须具有相同的类型 – Andomar

相关问题