[英]Not able to convert into date in oracle
我正在嘗試轉換日期字段,但年份不正確。
我的代碼是:
SELECT to_date((ADD_MONTHS(TRUNC(sysdate, 'MM'), -1) + 25), 'dd/mm/yyyy')
FROM dual
預期輸出像26/02/2018
,但我得到26/02/0018
。
我想念什么嗎?
您確實不應該在DATE數據類型值(SYSDATE是)上應用TO_DATE函數。
說您必須將查詢結果與另一個DATE數據類型值進行比較就可以了,因為您將比較兩個日期。
由於格式不正確,您將得到:在表示層中,您將使用TO_CHAR函數並以任何方式格式化結果; 例如:
SQL> SELECT
2 to_char((ADD_MONTHS(TRUNC(sysdate, 'MM'), -1) + 25), 'dd/mm/yyyy') val_1,
3 to_char((ADD_MONTHS(TRUNC(sysdate, 'MM'), -1) + 25), 'mon dd yyyy') val_2
4 FROM dual;
VAL_1 VAL_2
---------- --------------------
26/02/2018 vel 26 2018
SQL>
請注意,兩個值都是字符串 ,而不是日期。 此外,看到一個奇怪的VAL_2月? 它是克羅地亞語,但是有一種解決方法:
SQL> SELECT
2 to_char((ADD_MONTHS(TRUNC(sysdate, 'MM'), -1) + 25),
3 'mon dd yyyy',
4 'nls_date_language = english') val_2
5 FROM dual;
VAL_2
--------------------
feb 26 2018
SQL>
甚至
SQL> alter session set nls_date_language = english;
Session altered.
SQL> SELECT
2 to_char((ADD_MONTHS(TRUNC(sysdate, 'MM'), -1) + 25), 'mon dd yyyy') val_2
3 FROM dual;
VAL_2
--------------------
feb 26 2018
SQL>
但是-再一次-這只是為了呈現數據。 除了刪除TO_DATE函數外,您無需執行任何代碼(可以選擇更改會話,以便以所需的方式查看日期,但除了視覺外觀外,其他任何操作都不會更改):
SQL> alter session set nls_date_format = 'dd/mm/yyyy';
Session altered.
SQL> select ADD_MONTHS(TRUNC(sysdate, 'MM'), -1) + 25 val_3
2 from dual;
VAL_3
----------
26/02/2018
SQL>
如果您想要特定格式的日期,請使用to_char()
:
SELECT to_char((ADD_MONTHS(TRUNC(sysdate, 'MM'), -1) + 25), 'dd/mm/yyyy') from dual
的結果:
SELECT ADD_MONTHS(TRUNC(sysdate, 'MM'), -1) + 25 from dual
是一個日期,它是正確的。 問題是將日期轉換為日期。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.