sql - 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() 函数检查它是否匹配日期格式,然后提取数据。我需要类似的函数来检查列值是否匹配日期时间格式,然后显示为日期。
解决方案
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
推荐阅读
- blockchain - 计算 Polygon/Matic 链中 Aave 的借用或借用 APR
- css - 根据屏幕上的可用空间更改下拉方向
- python-3.x - 如何在 vs code、ipython(tensorflow)中解决这个问题?
- apache-spark - 未在 Spark 中继承的视图的 Hive 权限
- javascript - 如何检查主题中的“测试邮件”?我想写一个量角器测试来验证是否收到电子邮件
- firebase - Firebase Cloud Functions - 解析触发器时出错:找不到模块'core-js/fn/reflect'
- php - laravel url 管理员航海者
- html - 创建具有 4 种颜色的画布字段 - 每种颜色由总 100% 的百分比表示
- jquery - 如何使用类名获取最近的 td 的值
- linq - 使用实体框架更新一列并将所有值设置为 1