1

我想检查我的 SQL 查询中的日期值。如果日期等于预定义日期,则不打印任何内容,否则打印现有日期值。

我怎样才能正确编写它以获取所需的日期值?

我有以下查询:

(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”的日期值?

任何意见,将不胜感激。谢谢

4

4 回答 4

2

CASE 子句需要返回一个一致类型的值,因此它隐式地将空格转换为日期(计算为 1900 年 1 月 1 日)。

你有两个选择:

  • 选择 null 而不是空格。
  • 将条件中的日期显式else转换为字符串。

这是前者的(隐式)示例:

SELECT (CASE WHEN PaymentsMade.PaymentDate <> '09/09/1987' 
             THEN PaymentsMade.PaymentDate
         END)
       as dateOfPayment
于 2013-05-27T09:43:19.583 回答
0

使用CASE语句会更改该字段中的值,但不会更改返回的

似乎想过滤掉rows,如果是这种情况,请使用WHERE子句...

SELECT
  *
FROM
  PaymentsMade
WHERE
  PaymentDate <> '09/09/1987'
于 2013-05-27T09:42:07.537 回答
0

使用 NULL,而不是空字符串

一个空字符串被隐式转换为零,即 '01/01/1900'

SELECT CAST('' AS datetime)
于 2013-05-27T09:40:05.377 回答
0

您可以使用NULLIFNULL 替换特定日期:

SELECT NULLIF(PaymentsMade.PaymentDate, '09/09/1987')
FROM ...

不要只使用空字符串,因为它会被转换为 的类型PaymentDate,它可能是 a ,而fordatetime的等价物是。datetime''1900-01-01 00:00:00.000

于 2013-05-27T09:43:17.357 回答