在今天的日期之前删除列的案例声明

时间:2019-05-22 00:28:53

标签: sql-server

我正在尝试使用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'

1 个答案:

答案 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()