Oracle查询使用like子句与当前星期几的记录

时间:2018-05-07 22:40:41

标签: sql oracle oracle11g oracle10g

我在记录列中有一个天数列表。我想使用LIKE关键字查询该列以查看它是否包含一周中的当前日期。该记录包含例如:

INTV
-----------------------
monday,tuesday,wednesday

我想看看当天是否在INTV。因此,如果今天是星期一,我希望上面的行返回。

如果我硬编码一周中的某一天,它就可以了。例如,... WHERE intv LIKE '%monday%'。但是,当我尝试使用SYSDATE添加当天并使用to_char(sysdate, 'day')抓住当天时,它无法正常工作。

这是我迄今为止没有运气的尝试:

SELECT * FROM mytable where intv like '%' || to_char(sysdate, 'day') || '%';

SELECT * FROM mytable where intv like to_char(sysdate, 'day');

SELECT * FROM mytable where intv like to_char(sysdate, '%day%');

3 个答案:

答案 0 :(得分:5)

TO_CHAR( SYSDATE, 'DAY' )返回一个固定长度的字符串,右边用空格填充。

所以:

SELECT '%' || TO_CHAR( SYSDATE, 'DAY' ) || '%' FROM DUAL;

输出(针对我的NLS_DATE_LANGUAGENLS_TERRITORY设置):

%MONDAY   %

相反,您希望使用FMDAY格式模型删除尾随空格(FM是填充模式并禁止空白填充):

SELECT '%' || TO_CHAR( SYSDATE, 'FMDAY' ) || '%' FROM DUAL;

哪个输出:

%MONDAY%

答案 1 :(得分:1)

看看这是否有帮助 -

SELECT * 
FROM mytable 
where intv like replace(to_char(sysdate, '%day%'),' ','');

答案 2 :(得分:-2)

您必须使用正确的格式参数,例如:

select to_char(sysdate,'DD') from dual;

将返回当前日期的日期值,只需访问http://www.sqlines.com/oracle-to-sql-server/to_char_datetime以获取更多详细信息和其他参数。