我有一个PL SQL查询来显示时间,数据类型为字符串。该字段是根据字符串值创建的。在某些情况下可以替换SELECT
语句中的前两个字符吗?例如,当查询结果为24:33:07 (HH:MM:SS)
时,“ 24
”更改为“ 00
”,因此它变为00:33:07
答案 0 :(得分:0)
使用case when
并正确处理所有情况,例如此处:
with t(str) as (
select '16:43:48' from dual union all
select 'AA:17:01' from dual union all
select '01:12:25' from dual union all
select '24:33:07' from dual )
select str, case
when str like '24%' then '00'||substr(str, 3)
when str like 'AA%' then '12'||substr(str, 3)
else str
end corrected
from t
在我的示例中,两行错误,24
更改为00
,AA
更改为12
。
然后您可以使用以下方法验证所有时间是否都可以:
select to_date(corrected, 'hh24:mi:ss') from (...previous query...)
如果仍然存在问题,则会出现诸如ORA-01850、01851、01858之类的错误。您可以在PLSQL循环或使用正则表达式中找到错误的值。