首页 > 解决方案 > oracle中有没有等价于isdate()的函数

问题描述

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() 函数检查它是否匹配日期格式,然后提取数据。我需要类似的函数来检查列值是否匹配日期时间格式,然后显示为日期。

标签: sqlstringoracledatetime

解决方案


Oracle 等价物是validate_conversion().

但是,与 SQL Server 不同,Oracle 不能识别不同的格式。您需要明确指定所需的格式(除非您的日期已经采用 配置的格式nls_date_format)。基本上,您可以一个接一个地测试每种可能的格式,并在识别出一种格式时停止。

由于您的目的是将字符串实际转换为 a 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(),它基本上表现得像 Oracleto_date()default null on conversion error


推荐阅读