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的最后一个查询的帮助下,我修改了我的查询并得到了我想要的答案。