数据库语句优先显示指定的数据以及数据库获得系统时间
实践情况
前两天被要求做一个简单的查询语句,功能是显示值班信息,但是要求优先显示当天的值班信息,在按照时间顺序显示其他值班信息。
1. 如何优先展示指定的数据
// An highlighted block
select
*
from
a
ORDER BY
CASE
WHEN c.duty_start_time = CURRENT_DATE() THEN 0
ELSE 1
END,
c.duty_end_time DESC
使用case when 语句可以优先展示c.duty_start_time = CURRENT_DATE()的数据如果还有其他结构就要写成
// An highlighted block
select
*
from
a
ORDER BY
CASE
WHEN c.duty_start_time = CURRENT_DATE() THEN 0
WHEN c.duty_end_time = CURRENT_DATE() THEN 1
ELSE 2
END,
c.duty_end_time DESC
这样的话,会优先展示开始时间等于指定时间的信息,在展示结束时间等于指定时间的信息,依此类推
2. 数据库如何获取系统时间
MySql处理日期和时间函数众多,简单介绍3类获取当前日期时间时常用函数:
1.查询开始时的当前时间戳. current_timestamp -> timestamp with time zone
2.查询开始时的当前日期. current_date -> date
3.查询开始时的当前时间. current_time -> time with time zone
获取当前日期时间NOW
表示当前日期时间的主要有NOW()和SYSDATE()
NOW()返回是语句开始执行的时间,SYSDATE()返回是动态实时时间。
在存储的函数或触发器中,NOW()返回函数或触发语句开始执行的时间。
NOW()在整个语句执行过程中都不会变化。
NOW()返回日期时间格式取决于数据库设置的时区。
SELECT SYSDATE(),SLEEP(2),NOW(2),SYSDATE()
SYSDATE() NOW(2)
#2020-06-06 17:52:0 0 # 2020-06-06 17:52:08.89
获取日期CURDATE
CURRENT_DATE and CURRENT_DATE() are synonyms for CURDATE().
SELECT CURDATE(),CURRENT_DATE,CURRENT_DATE(),CURRENT_DATE()+0
#CURDATE() CURRENT_DATE CURRENT_DATE() CURRENT_DATE()+0
#2020-06-06 2020-06-06 2020-06-06 20200606
获取时间CURTIME
CURRENT_TIME and CURRENT_TIME() are synonyms for CURTIME().
SELECT CURTIME(),CURRENT_TIME,CURRENT_TIME(),CURRENT_TIME()+0
# CURTIME() CURRENT_TIME CURRENT_TIME() CURRENT_TIME()+0
# 17:37:14 17:37:14 17:37:14 173714
我选择的是CURRENT_DATE()类型