我正在尝试使用case
语句来更改日期在今天之前的任何行,并将这些行作为' '
值返回,然后将日期格式设置为dd/MM/yyy hh:mm
我尝试使用此功能:
CASE
WHEN AppointmentDate1 > getdate() THEN ' '
WHEN AppointmentDate1 IS NULL THEN ' '
ELSE AppointmentDate1
END AS [Appointment]
但是当我运行查询时,我收到以下错误消息:
第241层状态1的消息1行
从字符串转换日期和/或时间时转换失败。
我如何进行这项工作?然后如何更改为所需的格式? (AppointmentDate1
当前为SQL格式,例如'2019-05-22 10:00:00'
)
答案 0 :(得分:2)
一个case
表达式返回一个值。它评估所有return子句,并根据优先级选择一个。日期优先于字符串,因此失败是因为' '
(空格)无法转换为日期。
如果您想要日期作为结果,请使用NULL
。在这种情况下,您可以执行以下操作:
(CASE WHEN AppointmentDate1 < getdate() THEN AppointmentDate1
END) AS Appointment
如果您想要一个字符串,请转换为字符串:
(CASE WHEN AppointmentDate1 < getdate()
THEN CONVERT(VARCHAR(10), AppointmentDate1, 121)
ELSE '' -- I would just use an empty string
END) AS [Appointment]
我选择了样式121。您可能会喜欢其他样式。或使用FORMAT()
。