簡體   English   中英

我有一個 oracle 表,它在同一字段中具有 dd-mm-yyyy 和 dd/mm/yyyy 格式的日期。 現在我必須轉換成一種通用格式

[英]I have an oracle table which has date in dd-mm-yyyy and dd/mm/yyyy format in same field. Now i have to convert into one common format

我有一個 oracle 表,它在同一字段中具有 dd-mm-yyyy 和 dd/mm/yyyy 格式的日期。 現在我必須轉換成一種通用格式。 請建議如何解決這個問題?

我確實嘗試過但它失敗了,因為它由於無效月份而失敗。 有沒有辦法我可以首先確定日期是什么格式,然后根據我可能會轉換的案例陳述。 或者一些簡單的方法?

我相信您已經吸取了教訓,現在您要將這些日期存儲在日期數據類型中。

您的兩種不同的日期格式實際上並不重要,Oracle 在分隔字符時已經有點接受了。 例如

to_date('01/01/1900','dd-mm-yyyy') 

不會出錯

我確實嘗試過但它失敗了,因為它由於無效月份而失敗。

您的錯誤即將到來,因為您允許將與這些格式中的任何一種都不匹配的值放入您的字符串列中。

如果您至少使用 12.2 版(您應該在 2020 年使用),那么您可以使用validate_conversion函數來識別未轉換為您的格式的日期的行( https://docs.oracle.com/en/數據庫/oracle/oracle-database/12.2/sqlrf/VALIDATE_CONVERSION.html#GUID-DC485EEB-CB6D-42EF-97AA-4487884CB2CD )

select string_column
from  my_table
where  validate_conversion(string_column AS DATE,'dd/mm/yyyy') = 0

我們在 12.2 中獲得的另一個附加幫助器是to_date on conversion error子句。 所以你可以這樣做。

alter table my_table add my_date date;
update my_table set my_date = to_date(my_string default null on conversion error,'dd/mm/yyyy');

如果您確信除了這兩種格式之外沒有其他格式,一個簡單的方法是replace()

update mytable set mystring = replace(mystring, '/', '-');

這會將所有日期轉換為dd-mm-yyyy格式。

我建議向前邁出一步並將這些字符串轉換為date列。

alter table mytable add mydate date;
update mytable set mydate = to_date(replace(mystring, '/', '-'), 'dd-mm-yyyy');

如果遇到無效的日期字符串,這將失敗。 我傾向於認為這是一件好事,因為它清楚地表明這是數據的問題。 如果你想避免這種情況,你可以使用on conversion error ,從 Oracle 12 開始可用:

to_date(
    replace(mystring, '/', '-') default null on conversion error,
    'dd-mm-yyyy' 
)

然后您可以刪除不再需要的字符串列。

暫無
暫無

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

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