我必须运行开始时间在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-“对于日期格式,输入值不够长”* 原因:“有人能帮我用吗
0g0grzrc1#
您决定将DATE列存储为VARCHAR2(不推荐使用)。为什么?您不能使用提供的DATE数据类型功能,必须使用自己的实现。要从色谱柱中获取 time 部分(即HH24MISS),请使用substr
DATE
VARCHAR2
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
to_char
select to_char(to_date('20211110200336','yyyymmddhh24miss'),'HH24MISS') hh from dual; HH ------ 200336
mwngjboj2#
您可以将其全部转换为字符串:
SELECT * FROM table_name WHERE SUBSTR(starttime, 9) BETWEEN '000000' AND '050000'
rqenqsqc3#
您可以使用子字符串,以便oracle将其转换为数字第一个| 时间管理|| - -|| 20211110040336号文件|fiddle当然,如果你想用针来表示小时、分钟和秒,你也可以做一个铸件第一个| 时间管理|| - -|| 20211110040336号文件|fiddle
3条答案
按热度按时间0g0grzrc1#
您决定将
DATE
列存储为VARCHAR2
(不推荐使用)。为什么?您不能使用提供的
DATE
数据类型功能,必须使用自己的实现。要从色谱柱中获取 time 部分(即
HH24MISS
),请使用substr
所以 predicate 应该是
您可以首先将列转换为
DATE
类型但是您应该问自己,为什么在数据库设计中没有这个选择(??!)...
无论如何,要获得时间部分-使用
to_char
mwngjboj2#
您可以将其全部转换为字符串:
rqenqsqc3#
您可以使用子字符串,以便oracle将其转换为数字
第一个
| 时间管理|
| - -|
| 20211110040336号文件|
fiddle
当然,如果你想用针来表示小时、分钟和秒,你也可以做一个铸件
第一个
| 时间管理|
| - -|
| 20211110040336号文件|
fiddle