【问题标题】:Is there an equivalent function to isdate () in oracleoracle中有没有等价于isdate()的函数
【发布时间】:2020-11-04 18:10:20
【问题描述】:
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 版本?
  • 请编辑您的问题并包含有关rard.thevaluerard2.thevaluer.receiptdate 的数据类型的信息,以及每个数据类型的一些示例数据。谢谢。

标签: sql string oracle datetime


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-05-09
    • 2023-03-28
    • 2015-05-06
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    相关资源
    最近更新 更多