首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不,我不能更改字段

不,我不能更改字段
EN

Stack Overflow用户
提问于 2013-06-11 20:46:22
回答 2查看 83关注 0票数 0

我正在使用一个数据库,我是一个卑微的人。我不能对数据库进行更改,我的建议也会被忽略。我感兴趣的字段是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之间

下面是我的代码:

代码语言:javascript
运行
复制
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
EN

回答 2

Stack Overflow用户

发布于 2013-06-11 21:02:01

这将把24变成00:

代码语言:javascript
运行
复制
SUBSTR(FIX_DATETIME,1,6) 
   || REPLACE(SUBSTR(FIX_DATETIME,7,2),'24','00') 
   || SUBSTR(FIX_DATETIME,9,4)

那么你的间隔测试是:

代码语言:javascript
运行
复制
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
票数 4
EN

Stack Overflow用户

发布于 2013-06-11 21:12:57

我使用的解决方案是创建一个字段,去掉24,并将它们替换为00。将表从SQuirreL运行到临时表中,并在临时表中运行between。这就是我得到的全部信息:/

太棒了,

Copra

代码语言:javascript
运行
复制
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)
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17044468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档