我正在查询一个数据库,如下所示:
SELECT DISTINCT
CASE WHEN CreatedDate = '1900-01-01 00:00:00.000' THEN '' ELSE CreatedDate END AS CreatedDate
FROM LitHoldDetails
CreatedDate是一个DateTime字段,并且不可为空。如果该字段是最小日期(1/1/1900),我希望显示一个空字符串,但是CASE语句不起作用;当数据库中有该值时,CreatedDate会在查询中显示1900-01-01 00:00:00.000。我使用的是SQL Server 2008 R2。我做错了什么?
8条答案
按热度按时间bpsygsoo1#
当你使用
CASE
表达式(而不是 statement)时,你必须注意数据类型的优先级。在这种情况下,你不能只把DATETIME
设置为空字符串。试试看:一种解决方法是将日期显示为字符串:
或者,您也可以在表示层随意处理表示内容。
下面是一个完全符合您要求的示例:
结果:
vaj7vani2#
vmjh9lq93#
请尝试以下代码
oxiaedzo4#
如果您将数据
CAST
为VARCHAR()
,而不是显式CONVERT
数据,则只需CAST
将自动返回您的日期,然后作为Jun 18 2020 12:46PM
固定长度字符串格式,您可以另外SUBSTRING()
输出
ve7v8dk25#
有两个缺点。(1)最好不要对列别名使用字符串文字--这是不赞成的。(2)只使用样式120来获得相同的值。
igetnqfo6#
包含最小日期(1/1/1900)和最大日期(6/6/2079)的替代解决方案:
无论您使用什么解决方案,都应该将日期(或日期时间)字段转换为特定格式,以防止出现不同的默认服务器配置。
请参阅MSDN上的CAST和CONVERT:https://msdn.microsoft.com/en-us/library/ms187928.aspx
mkh04yzy7#
在查询中使用此函数,无需创建额外的变量。
就像一个魅力。
v9tzhpje8#
ISNULL如果数据为NULL,嵌套CAST函数可以删除1900-1-1值