如何仅从Varchar2字符串获得日期并使用Oracle 9i语句比较其他日期



ex。

我想从字符串'web_data_update-09-dec-2016_12:44:14'比较日期,与此类似这样的日期:

注意:我的dataupdon字段具有'web_data_update-09-dec-2016_12:44:14'之类的值。

select * from mytable where to_char(dataupdon,'dd-Mon-yyyy')<>'31-Dec-1899';

假设您正在比较日期并忽略时间组件,则可以使用:

SELECT *
FROM   mytable
WHERE  dataupdon NOT LIKE '%31-Dec-1899%';

或:

SELECT *
FROM   mytable
WHERE  REGEXP_SUBSTR(
         dataupdon,
         'd{2}-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-d{4}'
       ) <> '31-Dec-1899';

或:

SELECT *
FROM   mytable
WHERE  TO_DATE(
         REGEXP_SUBSTR(
           dataupdon,
           'd{2}-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-d{4}',
           1,  -- Start from the first character
           1,  -- Get the first occurrence
           'i' -- Case insensitive
         ),
         'DD-Mon-YYYY'
       ) <> DATE '1899-12-31';

或:

SELECT *
FROM   mytable
WHERE  SUBSTR( dataupdon, INSTR( dataupdon, '-' ) + 1, 11 ) <> '31-Dec-1899';

编辑:按MT0纠正。

dataupdon是一个字符串,其中最后一个20字符的第一个11字符以 DD-MON-YYYY的格式 CC_4(web_data_update- 09-dec-2016 _12:44:14((

如果他们不这样做,那将行不通。

select * from my_table
where 
to_date(substr(dataupdon,-20,11),
        'DD-MON-YYYY'
        )
<> 
to_date('31-Dec-1899','DD-Mon-YYYY') --replace date inside with any date

我做了一个假设,即在字段中最后两个字符存储日期,并在以下查询

以下使用
create  table mytable(dataupdon varchar2(1000));
insert into mytable(dataupdon ) values ('web_data_update-09-Dec-2016_12:44:14');
commit;
select * from mytable where to_date(substr(dataupdon,-20,11),'DD-Mon-YYYY')<>to_date('31-Dec-1899','DD-Mon-YYYY');
select * from mytable where to_date(substr(dataupdon,-20,11),'DD-Mon-YYYY')<>to_date('09-Dec-2016','DD-Mon-YYYY');

在MTO的最后一个查询的帮助下,我修改了我的查询并得到了我想要的答案。

最新更新