WHERE (ResTRRequest.RequestTime BETWEEN TO_CHAR(TRUNC(TO_DATE('2012-12-01 20:10:10', 'HH')), 'YYYY-MM-DD HH24:MI:SS')
AND TO_CHAR(TRUNC(CURRENT_TIMESTAMP, 'HH') + INTERVAL '59:59' MINUTE TO SECOND, 'YYYY-MM-DD HH24:MI:SS'))
Run Code Online (Sandbox Code Playgroud)
当我执行它时,我在查询条件的上方,它给我时间必须介于1到12之间,因为我给出的静态日期即''2012-12-01 20:10:10','HH')'如果我把sysdate的工作正常,但由于静态日期,它给了我错误.
Dav*_*ber 13
让我们稍微分解一下:
WHERE (ResTRRequest.RequestTime
BETWEEN TO_CHAR(TRUNC(TO_DATE('2012-12-01 20:10:10', 'HH')), 'YYYY-MM-DD HH24:MI:SS')
AND TO_CHAR(TRUNC(CURRENT_TIMESTAMP, 'HH') + INTERVAL '59:59' MINUTE TO SECOND, 'YYYY-MM-DD HH24:MI:SS'))
Run Code Online (Sandbox Code Playgroud)
首先,我认为你不是这个意思:TRUNC(TO_DATE('2012-12-01 20:10:10', 'HH'))我想也许你的意思是:TRUNC(TO_DATE('2012-12-01 20:10:10'), 'HH').1-12错误的数字来自于您有一个小时20并且正在尝试将其转换为掩码为的日期HH.但正如我所说,我认为这是一个错字.你也可以TIMESTAMP在这里使用文字,而不是TO_DATE():
TRUNC(TIMESTAMP'2012-12-01 20:10:10', 'HH')
Run Code Online (Sandbox Code Playgroud)
第二,只是为了解决这个问题,您是将日期或时间戳存储为字符串吗?那不是个好主意.
第三,BETWEEN在日期比较中使用它并不是一个好主意,因为你可能会错过边缘情况.最好重写如下:
WHERE ( ResTRRequest.RequestTime >= TO_CHAR(TRUNC(TO_DATE('2012-12-01 20:10:10'), 'HH'), 'YYYY-MM-DD HH24:MI:SS')
AND ResTRRequest.RequestTime < TO_CHAR(TRUNC(CURRENT_TIMESTAMP, 'HH') + INTERVAL '1' HOUR, 'YYYY-MM-DD HH24:MI:SS') )
Run Code Online (Sandbox Code Playgroud)
小智 9
问题是在面具:
TO_DATE('2012-12-01 20:10:10', 'HH')
Run Code Online (Sandbox Code Playgroud)
换成这个:
TO_DATE('2012-12-01 20:10:10', 'HH24')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
44750 次 |
| 最近记录: |