概要
本文用于记录日常工作中遇到的常见sql语句记录(不定时更新~)
日期相关
判断某个日期是星期几
SELECT to_char(to_date(‘2020-10-19’,‘YYYY-MM-DD’),‘day’) FROM DUAL
to_char的其他用法
Select to_char(sysdate,‘ss’) from dual取当前时间秒部分
Select to_char(sysdate,‘mi’) from dual取当前时间分钟部分
Select to_char(sysdate,‘HH24’) from dual取当前时间秒小时部分
Select to_char(sysdate,‘DD’) from dual取当前时间日期部分
Select to_char(sysdate,‘MM’) from dual取当前时间月部分
Select to_char(sysdate,‘YYYY’) from dual取当前时间年部分
Select to_char(sysdate,‘w’) from dual取当前时间是一个月中的第几周(从1日开始算)
Select to_char(sysdate,‘ww’) from dual取当前时间是一年中的第几周(从1.1开始算)
Select to_char(sysdate,‘iw’) from dual取当前时间是一年中的第几周(按实际日历的)
Select to_char(sysdate,‘d’) from dual取当前时间是一周的第几天,从星期天开始,周六结束
Select to_char(sysdate,‘day’) from dual 取当前日是星期几,和数据库设置的字符集有关,会输出’Tuesday’
Select to_char(sysdate,‘ddd’) from dual 当前日是一年中的第几天
查询某段日期内某个时间段的数据
客户要求“我们现在需要近两个月每个工作日(周一至周五)17:30-20:00的工单受理量,和每周末(周六日)的工单受理量。”
SELECT count(1)
FROM pe_test p
WHERE 1=1
-- and O.CREATEDATETIME BETWEEN SYSDATE-60 AND SYSDATE --近60天
and p.registoron BETWEEN TO_DATE('2020-09-01 00:00', 'yyyy-mm-dd hh24:mi') AND TO_DATE('2020-10-01 00:00', 'yyyy-mm-dd hh24:mi')--2020年9月到2020年10月
AND ((TO_CHAR(p.registoron, 'hh24:mi:ss') BETWEEN '17:30:00' AND
'20:00:00'
AND to_char(p.registoron,'day') not in('星期六','星期日'))or ( to_char(p.registoron,'day') in('星期六','星期日')))
模糊查询
instr与like的对比
SELECT * FROM STUDENTTAB WHERE STUNAME LIKE '%张%';
--就相当于
SELECT * FROM STUDENTTAB WHERE INSTR(STUNAME, '张') > 0;
SELECT * FROM STUDENTTAB WHERE STUNAME NOT LIKE '%张%';
--就相当于
SELECT * FROM STUDENTTAB WHERE INSTR(STUNAME, '张') = 0;
1、 instr>0 和like、instr=0 和not like 一般来说查询的结果相同(不考虑特殊字符)
2、 instr是一个函数,可以建立函数索引,如果过滤的条件有索引,那么instr就可以提高性能。
3、 like查询时,以’%'开头,列所加的索引是不起作用的。
4、在没有索引的前提下,当数据量比较大时,instr要比like效率高。