簡體   English   中英

oracle中是否有isdate()等價的函數

[英]Is there an equivalent function to isdate () in oracle

CASE WHEN ISDATE(LTRIM(RTRIM(rard.thevalue))) = 1     
THEN CONVERT(smalldatetime, LTRIM(RTRIM(rard.thevalue)))
WHEN ISDATE(LTRIM(RTRIM(rard2.thevalue))) = 1
THEN CONVERT(smalldatetime, LTRIM(RTRIM(rard2.thevalue)))
ELSE CONVERT(smalldatetime, LTRIM(RTRIM(r.receiptdate)))

我在 SQL 中有這種語法,它必須轉換為 oracle。 “thevalue”列有不同的格式,例如:HH:MM、MM/DD/YYYY、HH:MM:SS 等。所以 isdate() 函數正在檢查它是否與日期格式匹配,然后提取數據。 我需要類似的函數來檢查列值是否匹配日期時間格式,然后顯示為日期。

Oracle 等效項是validate_conversion()

但是,與 SQL Server 不同的是,Oracle 不會識別不同的格式。 您需要明確指定所需的格式(除非您的日期已經采用nls_date_format配置的格式)。 基本上,您可以一個接一個地測試每種可能的格式,並在識別出一種時停止。

由於您的目的是將字符串實際轉換為date ,直接使用to_date()on conversion error子句會更簡單。

考慮這樣的事情:

coalesce(
    to_date(thevalue default null on conversion error, 'MM/DD/YYYY'),
    to_date(thevalue default null on conversion error, 'YYYY-MM-DD HH24:MI:SS'),
    ...
) 

筆記:

  • 該函數愉快地忽略了前導和尾隨空格,因此無需事先trim()

  • 這需要 Oracle 12.2 或更高版本

  • isdate()在 SQL Server 中並不安全; 更好地使用try_convert() ,它的行為基本上類似於 Oracle 的to_date() default null on conversion error

暫無
暫無

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

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