我在记录列中有一个天数列表。我想使用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%');
答案 0 :(得分:5)
TO_CHAR( SYSDATE, 'DAY' )
返回一个固定长度的字符串,右边用空格填充。
所以:
SELECT '%' || TO_CHAR( SYSDATE, 'DAY' ) || '%' FROM DUAL;
输出(针对我的NLS_DATE_LANGUAGE
和NLS_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以获取更多详细信息和其他参数。