如何23:59:59在 Oracle SQL 中使用 2 個月前的一個月的第 14 天?我有如下查詢,我需要回答如下(類似風格):
select to_char(to_date(LAST_DAY(ADD_MONTHS(sysdate, -2)), 'YY-MM-DD'), 'YY/MM/DD) from dual
上面的查詢 return: 21/12/31,但是我需要像上面這樣的查詢,它將回傳值:'21/12/14 23:59:59'
uj5u.com熱心網友回復:
您可以截斷到當前月份的開始,而不是使用last_day,然后添加 14 天并減去一秒 - 這里使用日期算術和小數天,但您也可以使用間隔(如@MTO 所示):
select add_months(trunc(sysdate, 'MM'), -2) 14 - 1/86400 from dual
這為您提供了 2021-12-14 23:59:59 的日期值。然后,您可以根據需要對其進行格式化。
db<>小提琴
您當前的方法在日期和字串之間進行轉換,但依賴于隱式轉換,這不是一個好主意。我已將其包含在小提琴中,因此您可以看到它因不同的會話設定而中斷。
uj5u.com熱心網友回復:
您可以使用:
SELECT ADD_MONTHS(TRUNC(sysdate, 'MM'), -2)
INTERVAL '13 23:59:59' DAY TO SECOND AS day
FROM DUAL
哪個輸出:
日 2021-12-14 23:59:59
如果您想使用特定格式進行格式化,請使用TO_CHAR:
SELECT TO_CHAR(
ADD_MONTHS(TRUNC(sysdate, 'MM'), -2)
INTERVAL '13 23:59:59' DAY TO SECOND,
'YYYY-MM-DD HH24:MI:SS'
) AS day
FROM DUAL
db<>在這里擺弄
uj5u.com熱心網友回復:
如果我理解正確,那么
SQL> alter session set nls_date_format = 'dd.mm.yyyy hh24:mi:ss';
Session altered.
SQL> select trunc(last_day(add_months(sysdate, -3)) 15) - interval '1' second as result
2 from dual;
RESULT
--------------------------------------------------------------------------------
14.12.2021 23:59:59
SQL>
或者,如果它必須是格式化的字串(上面的值是 DATE):
SQL> select to_char(trunc(last_day(add_months(sysdate, -3)) 15) - interval '1' second, 'yy/mm/dd hh24:mi:ss') as result
2 from dual;
RESULT
--------------------------------------------------------------------------------
21/12/14 23:59:59
SQL>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/430051.html
下一篇:SQL查詢WHERE過濾器獨占
