我想检查SQL查询中的日期值。如果日期等于预定义日期,则不打印任何内容,ELSE将打印现有日期值。
如何正确编写以获取所需的日期值?
我有以下查询:
(SELECT (CASE
WHEN (PaymentsMade.PaymentDate = '09/09/1987') THEN ' '
ELSE PaymentsMade.PaymentDate
END)
) as dateOfPayment
当我运行此查询时,它在日期等于'09 / 09/1987'时正常工作,而当日期不等于'09 / 09/1987'时,它会打印'01 / 01/1900'。
如何检索不等于预定义日期'09 / 09/1987'的日期值?
任何建议都将不胜感激。 感谢
答案 0 :(得分:2)
CASE子句需要返回一致类型的值,因此它隐式地将空格转换为日期(评估为1900年1月1日)。
您有两种选择:
else
条件中的日期明确地转换为字符串。这是前者的一个(隐含的)例子:
SELECT (CASE WHEN PaymentsMade.PaymentDate <> '09/09/1987'
THEN PaymentsMade.PaymentDate
END)
as dateOfPayment
答案 1 :(得分:0)
使用NULL,而不是空字符串
空字符串隐式转换为零,即'01 / 01/1900'
SELECT CAST('' AS datetime)
答案 2 :(得分:0)
使用CASE
语句更改该字段中的值,但不会更改返回的行。
您出现想要过滤行,如果是这种情况,请使用WHERE
子句......
SELECT
*
FROM
PaymentsMade
WHERE
PaymentDate <> '09/09/1987'
答案 3 :(得分:0)
您可以使用NULLIF
将特定日期替换为NULL:
SELECT NULLIF(PaymentsMade.PaymentDate, '09/09/1987')
FROM ...
不要只使用空字符串,因为它会转换为PaymentDate
的类型,可能是datetime
,datetime
的等效''
将是1900-01-01 00:00:00.000
。