如果大小写等于某物,则减去日期

If case equals something then subtract date

正在尝试编写一个查询来检查列是否等于某项。如果是这样,取日期列的值然后减去某个值。

查询如下所示:

select
  v.voyage "Voyage"
 ,v.service "Service"
 ,to_char(vp.eta_date, 'MONTH dd, yyyy') "ETA"
 ,case 
    when v.service = "USA" then to_char(vp.eta_date, 'MONTH dd, yyyy') - 2
    else 'n/a'
    end as 'Notice'
from 
  table
// bunch of joins

当我 运行 以上时,我收到一条错误消息:

FROM keyword not found where expected

错误指向单词 'Notice'。

我基本上想检查服务是否等于 'USA',如果是,请使用 eta_date 减去 2 得到 Notice 列中的日期。

如果没有,那么就在通知栏中'N/A'。

我做错了什么,我该如何解决?

有几个语法错误和引号混淆使这变得混乱。这些是引号规则(与您的代码相关)

  • 对字符串使用单引号
  • 对列别名使用双引号

然后是这部分: to_char(vp.eta_date, 'MONTH dd, yyyy') - 2 告诉 sql 引擎从格式为“MONTH dd, yyyy”的字符串中减去 2。您的意思可能是从日期 (vp.eta_date) 中减去 2 天,然后将其格式化为“MONTH dd, yyyy”,可以写成 to_char(vp.eta_date - 2, 'MONTH dd, yyyy')

把它们放在一起得到

select
  v.voyage "Voyage"
 ,v.service "Service"
 ,to_char(vp.eta_date, 'MONTH dd, yyyy') "ETA"
 ,case 
    when v.service = 'USA' then to_char(vp.eta_date - 2, 'MONTH dd, yyyy')
    else 'n/a'
    end as "Notice"
from 
  table