Sql 如何包含包含SELECT脚本计算的列?
我只是想了解一下PL/SQL 我想创建一个SELECT脚本,它将显示开始日期和结束日期之间的日期差异,然后在Flag_Status列中相应地显示一条消息Sql 如何包含包含SELECT脚本计算的列?,sql,oracle,plsql,plsqldeveloper,Sql,Oracle,Plsql,Plsqldeveloper,我只是想了解一下PL/SQL 我想创建一个SELECT脚本,它将显示开始日期和结束日期之间的日期差异,然后在Flag_Status列中相应地显示一条消息 如果计算结果为28天或更短,则应显示:“到期日在未来28天内” 如果计算结果超过28天,则应显示:“到期日从今天起超过28天” 否则显示:“已过期” 我尝试过使用CASE、WHEN和THEN语句。我已经将计算包含在案例功能中,但是在运行时,我会遇到一条无效的标识符错误消息 SELECT eligible_start, eligible_en
- 如果计算结果为28天或更短,则应显示:“到期日在未来28天内”
- 如果计算结果超过28天,则应显示:“到期日从今天起超过28天”
- 否则显示:“已过期”
SELECT eligible_start, eligible_end,
CASE
WHEN to_date(eligible_end) - to_date(eligible_start) <= 28 THEN "due to expire within the next 28 days"
WHEN to_date(eligible_end) - to_date(eligible_start) > 28 THEN "due to expire more than 28 days from today"
ELSE "already expired"
END AS Flag_Status
FROM Check_Table
选择符合条件的\u开始,符合条件的\u结束,
案例
何时截止日期(符合条件的截止日期)-截止日期(符合条件的起始日期)28,然后“到期日从今天起超过28天”
否则“已过期”
结束为标志_状态
从检查表
我希望输出显示合格的开始日期、合格的结束日期和名为“Flag_Status”的列以及相应的消息
SELECT eligible_start, eligible_end,
CASE
WHEN to_date(eligible_end) - to_date(eligible_start) <= 28 THEN "due to expire within the next 28 days"
WHEN to_date(eligible_end) - to_date(eligible_start) > 28 THEN "due to expire more than 28 days from today"
ELSE "already expired"
END AS Flag_Status
FROM Check_Table
输出显示错误消息“已过期”无效标识
有没有人能提供一些建议或提示?首先要注意的是,在
CASE
语句的输出中,您需要使用单引号而不是双引号。单引号用于定义字符串,而双引号用于标识符
考虑:
SELECT
eligible_start,
eligible_end,
CASE
WHEN TO_DATE(eligible_end) - TO_DATE(eligible_start) <= 28 THEN 'due to expire within the next 28 days'
WHEN TO_DATE(eligible_end) - TO_DATE(eligible_start) > 28 THEN 'due to expire more than 28 days from today'
ELSE 'already expired'
END AS Flag_Status
FROM Check_Table
选择
从现在开始,
(完),
案例
何时截止日期(符合条件的截止日期)-截止日期(符合条件的起始日期)28,然后“到期日从今天起超过28天”
否则“已过期”
结束为标志_状态
从检查表
其他备注:
语句的逻辑不是很清楚;您预计什么时候会出现CASE
?您的示例数据没有显示这一点,但您应该知道,给定当前SQL,只有当两个日期列中的一个为'alreay expired'
时,它才会出现,从而导致减法的结果也变为NULL
;这真的是你想要的吗NULL
- 您似乎将日期存储为字符串;这不是一个好做法,最好将这些列转换为
数据类型。否则,在使用DATE
时,我建议传递第二个参数,该参数表示要转换的字符串的NLS格式,而不是依赖数据库或会话默认值TO_DATE()