如果大小写等于某物,则减去日期
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
正在尝试编写一个查询来检查列是否等于某项。如果是这样,取日期列的值然后减去某个值。
查询如下所示:
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