张不大的博客

一些sql技巧

This is a page about »一些sql技巧«.

sql 的一些技巧

sql 与时间相关的用法

  1. 获取当前时间 now() 返回当前的日期和时间 (YYYY-MM-DD HH:MM:SS) current_date() 返回当前的日期 (YYYY-MM-DD) current_time() 返回当前的时间(HH:MM:SS) curdate() 返回当前的日期 类似 current_date curtime() 返回当前的时间 类似 current_time
SELECT NOW();          -- 获取当前时间
SELECT CURRENT_DATE;   -- 获取当前日期
  1. 日期与时间运算 date_add() 或 date_sub() 分别用来加、减指定的时间间隔
SELECT DATE_ADD(NOW(), INTERVAL 5 DAY);  -- 当前时间加 5 天
SELECT DATE_SUB(NOW(), INTERVAL 2 HOUR); -- 当前时间减去 2 小时
  1. 比较日期和时间 日期比较,直接比较date、datetime字段,比如运算符 =、<、>、<=、>=
SELECT * FROM orders WHERE order_date > '2024-01-01';

时间区间比较,通过 between 操作符在指定时间范围内查询记录

SELECT * FROM events WHERE event_date BETWEEN '2024-01-01' AND '2024-12-31';

timestampdiff() 计算两个日期时间之间的差异,计算天数、小时、分钟

SELECT TIMESTAMPDIFF(DAY, '2024-01-01', NOW()); -- 计算当前日期与 2024-01-01 之间的天数

datediff() 返回两个日期之间的天数差

SELECT DATEDIFF(NOW(), '2024-01-01'); -- 返回当前日期与指定日期的天数差

日期格式化, date_format() 格式化日期时间值,返回指定格式的字符串

SELECT DATE_FORMAT(NOW(), '%Y-%m-%d');  -- 格式化为 '2024-11-14'
SELECT DATE_FORMAT(NOW(), '%H:%i:%s');  -- 格式化为 '14:30:25'

常见格式符:

%Y:四位年份(如 2024) %m:月份(01 到 12) %d:日期(01 到 31) %H:小时(00 到 23) %i:分钟(00 到 59) %s:秒(00 到 59)

=================================

获取特定的日期部分:

YEAR():返回日期的年份部分。 MONTH():返回日期的月份部分。 DAY():返回日期的日部分。 HOUR():返回时间的小时部分。 MINUTE():返回时间的分钟部分。 SECOND():返回时间的秒部分。

SELECT YEAR(NOW());    -- 获取当前年份
SELECT MONTH(NOW());   -- 获取当前月份
SELECT DAY(NOW());     -- 获取当前日期

SELECT UNIX_TIMESTAMP(NOW()); -- 当前时间的时间戳
SELECT UNIX_TIMESTAMP('2024-01-01 00:00:00'); -- 指定时间的时间戳

SELECT FROM_UNIXTIME(1609459200); -- 转换时间戳为日期时间

SELECT * FROM events WHERE event_date > NOW() - INTERVAL 1 WEEK;  -- 最近一周内的事件

SELECT DATE(created_at) AS day, COUNT(*) FROM orders GROUP BY day;  -- 按天统计订单数量
SELECT MONTH(created_at) AS month, COUNT(*) FROM orders GROUP BY month;  -- 按月统计订单数量

#c/c++ #git #sql