Sql 如何包含包含SELECT脚本计算的列?

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

我只是想了解一下PL/SQL

我想创建一个SELECT脚本,它将显示开始日期和结束日期之间的日期差异,然后在Flag_Status列中相应地显示一条消息

  • 如果计算结果为28天或更短,则应显示:“到期日在未来28天内”

  • 如果计算结果超过28天,则应显示:“到期日从今天起超过28天”

  • 否则显示:“已过期”

我尝试过使用CASE、WHEN和THEN语句。我已经将计算包含在案例功能中,但是在运行时,我会遇到一条无效的标识符错误消息

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
    语句的逻辑不是很清楚;您预计什么时候会出现
    'alreay expired'
    ?您的示例数据没有显示这一点,但您应该知道,给定当前SQL,只有当两个日期列中的一个为
    NULL
    时,它才会出现,从而导致减法的结果也变为
    NULL
    ;这真的是你想要的吗

  • 您似乎将日期存储为字符串;这不是一个好做法,最好将这些列转换为
    DATE
    数据类型。否则,在使用
    TO_DATE()
    时,我建议传递第二个参数,该参数表示要转换的字符串的NLS格式,而不是依赖数据库或会话默认值


你好,戈登,谢谢你的快速回复!我已经编辑了上面的内容,并包含了一个关于预期结果的链接。我希望这能有所帮助。有一点需要注意的是,对于“将在未来28天内到期”这句话,你不应该