簡體   English   中英

Oracle SQL Developer 中的 DATE 格式

[英]DATE format in Oracle SQL Developer

只是 Oracle SQL Developer 中某些編碼的一個小問題。 這是我第一次離開 SQL Server,我已經對我做錯了什么感到困惑。

我只是想在表中插入一些數據,但我遇到了一個錯誤;
Error report - ORA-01861: literal does not match format string

我將表中的日期字段設置為數據類型 DATE。 我想插入的只是一些基本信息;
INSERT INTO BasicUsers VALUES(2125, 'Dave', 'Forest', 'John', '1998-10-25', 30.54);

我在互聯網上做了一些研究,沒有什么可以讓我理解的。 我嘗試將日期格式更改為 YYYY-MON-DD 所以 1998-Oct-25 但這也不起作用。

誰能解釋我在這里做錯了什么以及我如何糾正這個問題。
謝謝你。

'1998-10-25'不是DATE數據類型; 它是一個字符串文字。

相反,使用DATE文字:

INSERT INTO BasicUsers  VALUES(2125, 'Dave', 'Forest', 'John', DATE '1998-10-25', 30.54);

或者使用帶有格式模型的TO_DATE函數將字符串顯式轉換為DATE

INSERT INTO BasicUsers
  VALUES(2125, 'Dave', 'Forest', 'John', TO_DATE( '1998-10-25', 'YYYY-MM-DD' ), 30.54);

不要依賴從字符串到DATE隱式轉換,因為 Oracle 將嘗試使用NLS_DATE_FORMAT會話參數隱式地將日期轉換為字符串。 您的查詢有效:

INSERT INTO BasicUsers
  VALUES(2125, 'Dave', 'Forest', 'John',
  TO_DATE(
    '1998-10-25',
    ( SELECT value FROM NLS_SESSION_PARAMETERS WHERE parameter = 'NLS_DATE_FORMAT' )
  ),
  30.54);

如果會話參數不匹配,那么您的查詢將引發異常。 由於用戶可以隨時更改自己的會話參數,那么你就可以永遠依靠這種格式是用戶甚至用戶的會話之間是一致的,所以你應該始終明確的轉換,你的執行情況。

使用DATE前綴:

INSERT INTO BasicUsers 
    VALUES (2125, 'Dave', 'Forest', 'John', DATE '1998-10-25', 30.54)

我還建議您為插入包含明確的列名。 例如,值的定義順序可能與您提供值的順序不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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