SQL 依据特定时间单位检索数据

SQL 依据特定时间单位检索数据,你想依据指定的月份、星期或者其他时间单位来筛选记录行。例如,你希望找出入职月份是 February(2 月)或者 December(12 月),并且入职当天是 Tuesday(星期二)的所有员工。

SQL 依据特定时间单位检索数据 问题描述

你想依据指定的月份、星期或者其他时间单位来筛选记录行。例如,你希望找出入职月份是 February(2 月)或者 December(12 月),并且入职当天是 Tuesday(星期二)的所有员工。

SQL 依据特定时间单位检索数据 解决方案

使用关系数据库管理系统中的函数来找出一个日期值对应的月份和星期。在很多情况下,本实例可能都会有用。试想,如果我们希望依据 HIREDATE 做一些检索,但又想忽略年份,只按照月份检索(或者按照 HIREDATE 里其他我们感兴趣的时间单位来检索),这个时候本实例提供的技巧就有了用武之地。下面给出的解决方案以月份和星期的检索为例。掌握了各种数据库提供的日期格式化函数之后,我们就能很方便地修改这些解决方案以实现按照年份检索,按照季度检索,按照年份和季度的组合检索,按照月份和年份的组合检索,等等。
DB2 和 MySQL
使用函数 MONTHNAMEDAYNAME 分别找出员工入职日期所对应的月份和星期。

1 select ename
2   from emp
3  where monthname(hiredate) in ('February','December')
4     or dayname(hiredate) = 'Tuesday'

Oracle 和 PostgreSQL
使用 TO_CHAR 函数找出员工入职日期对应的月份和星期,使用 RTRIM 函数过滤掉尾部的空格字符。

1 select ename
2   from emp
3  where rtrim(to_char(hiredate,'month')) in ('february','december')
4     or rtrim(to_char(hiredate,'day')) = 'tuesday'

SQL Server
使用 DATENAME 函数找出员工入职日期对应的月份和星期。

1  select ename
2    from emp
3   where datename(m,hiredate) in ('February','December')
4      or datename(dw,hiredate) = 'Tuesday'

SQL 依据特定时间单位检索数据 扩展知识

对于以上所有解决方案而言,关键在于知道要调用哪个函数以及如何调用。如果想确认每个函数返回的结果值,不妨在 SELECT 子句后面直接调用相应的函数并检查其输出结果。下面列出了 DEPTNO 等于 10 的员工对应的查询结果集。

select ename,datename(m,hiredate) mth,datename(dw,hiredate) dw
  from emp
 where deptno = 10
 
ENAME  MTH       DW
------ --------- ---------
CLARK  June      Tuesday
KING   November  Tuesday
MILLER January   Saturday

一旦知道了相关的函数返回的结果值,那么利用上述解决方案里用到的函数来筛选行记录就非常容易了。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程