where子句上的Oracle日期格式

w8f9ii69  于 2022-11-22  发布在  Oracle
关注(0)|答案(3)|浏览(159)

我必须运行开始时间在00.00 AM和05.00 AM之间的报告,但开始时间字段为varchar字段,其值为“20211110200336”
我正在尝试
WHERE TO_CHAR(TO_DATE(开始时间,'年-月-日HH 24:MI:SS'),'HH 24:MI:SS')介于'000000'与'050000'之间
但我收到错误“ORA-01840:对于日期格式,输入值不够长01840.00000-“对于日期格式,输入值不够长”* 原因:“
有人能帮我用吗

0g0grzrc

0g0grzrc1#

您决定将DATE列存储为VARCHAR2(不推荐使用)。
为什么?您不能使用提供的DATE数据类型功能,必须使用自己的实现。
要从色谱柱中获取 time 部分(即HH24MISS),请使用substr

select substr('20211110200336',9,6) hh from dual;

HH    
------
200336

所以 predicate 应该是

WHERE substr(starttime,9,6) BETWEEN '000000' AND '050000'

可以首先将列转换为DATE类型

to_date('20211110200336','yyyymmddhh24miss')

但是您应该问自己,为什么在数据库设计中没有这个选择(??!)...
无论如何,要获得时间部分-使用to_char

select to_char(to_date('20211110200336','yyyymmddhh24miss'),'HH24MISS') hh from dual;

HH    
------
200336
mwngjboj

mwngjboj2#

您可以将其全部转换为字符串:

SELECT *
FROM   table_name
WHERE  SUBSTR(starttime, 9) BETWEEN '000000' AND '050000'
rqenqsqc

rqenqsqc3#

您可以使用子字符串,以便oracle将其转换为数字
第一个
| 时间管理|
| - -|
| 20211110040336号文件|
fiddle
当然,如果你想用针来表示小时、分钟和秒,你也可以做一个铸件
第一个
| 时间管理|
| - -|
| 20211110040336号文件|
fiddle

相关问题