簡體   English   中英

無法在Oracle中轉換為日期

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM