我正在使用一个数据库,我是一个卑微的人。我不能对数据库进行更改,我的建议也会被忽略。我感兴趣的字段是varchar,它以'MMDDYYHH24MISS‘格式捕获时间,但正如我所说的,它以文本形式存储在varchar字段中。
我的老板想要一个报告,我必须在此字段上使用between语句来过滤实际的日期范围。这就是问题所在,文本将0000小时存储为2400小时,这真的搞错了BETWEEN子句。尽管如此,我还是不能更改字段类型。
我已经知道了如何将24替换为00,但是如何在SELECT语句的WHERE部分中运行这段代码呢?每个人都说“只需将VARCHAR字段更改为数据字段即可。”嗯,我不能--我是个卑微的人。
如何运行这段代码,然后在SELECT的WHERE部分的BETWEEN语句中运行另一个引用FIX_DATETIME的SELECT语句?
一位年轻女士在数据沼泽中涉水,科拉织布机
即。其中to_date(FIX_DATETIME,'MMDDYYHH24MISS')介于( sysdate -90)和sysdate之间
下面是我的代码:
SELECT MOPACTIVITY.MOPID,
(CASE
WHEN SUBSTR(MOPACTIVITY.MOPID, 7, 2) = '24' THEN SUBSTR(MOPACTIVITY.MOPID, 1, 2)||SUBSTR(MOPACTIVITY.MOPID, 3, 2)||SUBSTR(MOPACTIVITY.MOPID, 5, 2)||'00'||SUBSTR(MOPACTIVITY.MOPID, 9, 2)||SUBSTR(MOPACTIVITY.MOPID, 11, 2)
ELSE MOPACTIVITY.MOPID
END ) FIX_DATETIME,
sysdate "SYSDATE"
FROM MOPUSER.MOPACTIVITY发布于 2013-06-11 21:02:01
这将把24变成00:
SUBSTR(FIX_DATETIME,1,6)
|| REPLACE(SUBSTR(FIX_DATETIME,7,2),'24','00')
|| SUBSTR(FIX_DATETIME,9,4)那么你的间隔测试是:
WHERE to_date (SUBSTR(FIX_DATETIME,1,6)
|| REPLACE(SUBSTR(FIX_DATETIME,7,2),'24','00')
|| SUBSTR(FIX_DATETIME,9,4),
'MMDDYYHH24MISS') BETWEEN (sysdate-90) and sysdate发布于 2013-06-11 21:12:57
我使用的解决方案是创建一个字段,去掉24,并将它们替换为00。将表从SQuirreL运行到临时表中,并在临时表中运行between。这就是我得到的全部信息:/
太棒了,
Copra
DROP TABLE TEMPXMOP24;
CREATE TABLE TEMPXMOP24
(
MOPID VARCHAR2(12),
TYPE VARCHAR2(200),
MOPSTART DATE,
MOPAPPROVEDTIME DATE,
TIME_DIF VARCHAR2(45),
FIXED_MOP VARCHAR2(12)
);
INSERT INTO TEMPXMOP24 (MOPID,TYPE,MOPSTART,MOPAPPROVEDTIME,TIME_DIF,FIXED_MOP)
SELECT MOPACTIVITY.MOPID,
MOPACTIVITY.MOPSERVICEIMPACTED "TYPE",
MOPACTIVITY.MOPSTART,
MOPACTIVITY.MOPAPPROVEDTIME,
ROUND(MOPACTIVITY.MOPSTART - MOPACTIVITY.MOPAPPROVEDTIME,2)||' days' "TIME_DIF",
(CASE
WHEN SUBSTR(MOPACTIVITY.MOPID, 7, 2) = '24' THEN SUBSTR(MOPACTIVITY.MOPID, 1, 6)||'00'||SUBSTR(MOPACTIVITY.MOPID, 9, 4)
ELSE MOPACTIVITY.MOPID
END ) FIXED_MOP
FROM MOPUSER.MOPACTIVITY
WHERE MOPACTIVITY.MOPSTART - MOPACTIVITY.MOPAPPROVEDTIME BETWEEN 0 and 14;
SELECT * FROM TEMPXMOP24
WHERE TRUNC(TO_DATE(TEMPXMOP24.FIXED_MOP, 'MMDDYYHH24MISS'))
BETWEEN TRUNC(SYSDATE-90) AND TRUNC(SYSDATE)https://stackoverflow.com/questions/17044468
复制相似问题