如果/ then / else在SQL Query中

时间:2013-05-27 09:35:29

标签: sql tsql if-statement case

我想检查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'的日期值?

任何建议都将不胜感激。 感谢

4 个答案:

答案 0 :(得分:2)

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

您有两种选择:

  • 选择null而不是空格。
  • 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的类型,可能是datetimedatetime的等效''将是1900-01-01 00:00:00.000