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