簡體   English   中英

如何在 PL/SQL 中將日期格式從 MM/DD/YYYY 更改為 YYYY-MM-DD?

[英]How to change the date format from MM/DD/YYYY to YYYY-MM-DD in PL/SQL?

我在存儲為MM/DD/YYYY格式的表中有一個日期列。 我必須以YYYY-MM-DD格式(即 XSD 日期格式)在另一個表中選擇並存儲相同的日期。 但我做不到。 我正在使用這個查詢:

select to_date(date_column,'YYYY-MM-DD') from table;

但我仍然無法做到。 給我錯誤

ORA-01843 : 不是有效月份

select to_char(date_column,'YYYY-MM-DD') from table;

這聽起來像你弄錯了方法。 如果您現有的數據采用 MM/DD/YYYY 格式,那么您需要:

select to_date(date_column,'MM/DD/YYYY') from table;

將現有數據轉換為 DATE 值。 (老實說,我確實想知道為什么它們不存儲為日期......)

如果您想一步執行轉換,您可能需要:

select to_char(to_date(date_column,'MM/DD/YYYY'), 'YYYY-MM-DD') from table;

換句話說,對於每一行,將其解析為 MM/DD/YYYY 格式,然后將其重新格式化為 YYYY-MM-DD 格式。

(不過,我仍然建議嘗試將數據保留為“自然”類型,而不是首先將其存儲為文本。)

我假設您可以使用 Oracle SQL Developer,您可以從這里下載。

您可以定義要使用的日期格式:

ALTER SESSION SET nls_date_format='yyyy-mm-dd';

有了這個,現在你可以執行這樣的查詢:

SELECT * FROM emp_company WHERE JDate = '2014-02-25'

如果你想更具體,你可以像這樣定義日期格式:

ALTER SESSION SET nls_date_format='yyyy-mm-dd hh24:mi:ss';

要將DATE列轉換為另一種格式,只需使用具有所需格式的TO_CHAR() ,然后將其轉換回DATE類型:

SELECT TO_DATE(TO_CHAR(date_column, 'DD-MM-YYYY'), 'DD-MM-YYYY') from my_table
select to_date(to_char(ORDER_DATE,'YYYY/MM/DD')) 
from ORDERS;

這可能會有所幫助,但最后你會得到一個字符串而不是日期。 顯然,您的格式問題肯定會得到解決。

對於軍事時間格式,

select TO_CHAR(SYSDATE, 'yyyy-mm-dd hh24:mm:ss') from DUAL

--2018-07-10 15:07:15

如果您希望日期四舍五入為月、日、小時、分鍾,您可以嘗試

SELECT TO_CHAR( SYSDATE, 'yyyy-mm-dd hh24:mi:ss') "full-date" --2018-07-11 10:40:26
, TO_CHAR( TRUNC(SYSDATE, 'year'), 'yyyy-mm-dd hh24:mi:ss') "trunc-to-year"-- 2018-01-01 00:00:00
, TO_CHAR( TRUNC(SYSDATE, 'month'), 'yyyy-mm-dd hh24:mi:ss') "trunc-to-month" -- 2018-07-01 00:00:00
, TO_CHAR( TRUNC(SYSDATE, 'day'), 'yyyy-mm-dd hh24:mi:ss') "trunc-to-Sunday" -- 2018-07-08 00:00:00
, TO_CHAR( TRUNC(SYSDATE, 'dd'), 'yyyy-mm-dd hh24:mi:ss') "trunc-to-day" -- 2018-07-11 00:00:00
, TO_CHAR( TRUNC(SYSDATE, 'hh'), 'yyyy-mm-dd hh24:mi:ss') "trunc-to-hour" -- 2018-07-11 10:00:00
, TO_CHAR( TRUNC(SYSDATE, 'mi'), 'yyyy-mm-dd hh24:mi:ss') "trunc-to-minute" -- 2018-07-11 10:40:00
from DUAL

對於格式文字,您可以在https://docs.oracle.com/cd/B28359_01/server.111/b28286/functions242.htm#SQLRF52037 中找到幫助

基本上,Oracle 中日期列中的數據可以以任何用戶定義的格式存儲或保留為默認格式。 這一切都取決於 NLS 參數。

當前格式可以通過以下方式查看:SELECT SYSDATE FROM DUAL;

如果您嘗試插入記錄並且插入語句不是這種格式,那么它會給出:ORA-01843:無效月份錯誤。 因此,首先在插入語句之前更改數據庫日期格式(我假設您有大量插入語句),然后執行插入腳本。

可以通過以下方式更改格式:ALTER SESSION SET nls_date_format = 'mm/dd/yyyy hh24:mi:ss';

您也可以從 SQL Developer GUI 更改 NLS 設置,(工具 > 首選項 > 數據庫 > NLS)

參考: http : //oracle.ittoolbox.com/groups/technical-functional/oracle-sql-l/how-to-view-current-date-format-1992815

這對我有用! 您可以轉換為您想要的數據類型,無論是日期還是字符串

to_char(TO_DATE(TO_CHAR(end_date),'MM-DD-YYYY'),'YYYY-MM-DD') AS end_date

您可以簡單地通過以下方式做到這一點:

select to_char(to_date(date_column, 'MM/DD/YYYY'), 'YYYY-MM-DD') from table

根據評論,數據表中的數據類型是DATE。 所以你應該簡單地使用:“select date_column from table;”

現在,如果您執行選擇,您將返回一個日期數據類型,這應該是 .xsd 所需要的。

日期的文化相關格式應在 GUI 中完成(大多數語言都有方便的方法),而不是在選擇語句中。

延遲回復但 for.databse-date-type 以下行有效。

SELECT to_date(t.given_date,'DD/MM/RRRR') response_date FROM Table T

given_date 的列類型是日期

SELECT TO_DATE(TO_CHAR(date_column,'MM/DD/YYYY'), 'YYYY-MM-DD')
FROM table;

如果您需要更改列輸出日期格式,只需使用 to_char 這將為您提供一個字符串,而不是日期。

SELECT STR_TO_DATE(date_column,'%Y-%m-%d') from table;

還要經歷

http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html

暫無
暫無

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

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