【发布时间】:2017-04-26 23:47:54
【问题描述】:
我有两个参数,分别称为 START_DATE 和 END_DATE。
如果输入了开始日期和结束日期,我想使用 TO_CHAR 转换为不同的格式并以 'MON DD, YYYY' 格式显示 ":start_date - :end_date")
但是,如果未输入参数,我想使用 TO_CHAR 函数显示上个月的信息,即(2017 年 3 月 1 日-2017 年 3 月 31 日)。
这是下面的代码。有人可以识别我的错误并提供帮助吗?
SELECT DECODE (TO_CHAR(:START_DATE, 'MON DD, YYYY',(trunc(trunc(sysdate,'MONTH')-1,'MONTH'))),'MON DD, YYYY')
|| ' - ' || DECODE (TO_CHAR(:END_DATE, 'MON DD, YYYY',(trunc(sysdate,'MONTH')-1)'MON DD, YYYY') BILLPERIOD
我如何使用 decode 函数在 sql 中编写这个?
【问题讨论】:
-
标记您正在使用的 dbms。您的查询中有许多特定于产品的功能。
-
您使用什么风格的 SQL?用那个标记问题?
-
我正在使用 Oracle SQL dbms。
-
我又试了一次,这样更准确吗:SELECT DECODE (:START_DATE, NULL, TO_CHAR((trunc(trunc(sysdate,'MONTH')-1,'MONTH')),'MON DD , YYYY'), TO_CHAR (:START_DATE,'MON DD, YYYY'))|| ' - ' || DECODE (:END_DATE, NULL, TO_CHAR((trunc(sysdate,'MONTH')-1),'MON DD, YYYY'), TO_CHAR(:END_DATE,'MON DD, YYYY'))
-
@jarlh:你确定吗?我可能是错的,但我认为这个标准 SQL 例如用于连接的
||运算符,用于参数的:前缀等。唯一有问题的语法是sysdate(保留字),但我认为意图很明确。