1.存储的格式是YY-mm-dd类型时查询:
假如表product有字段add_time,它的数据类型为datetime,写sql如下:
代码如下
|
复制代码
|
select
* from product where add_time = '2019-01-12'
|
对于这种语句,适合存储的格式是YY-mm-dd类型的;
1.Date()函数处理字段作为日期查询条件:
如果你存储的格式是YY-mm-dd H:i:s (2019-01-12 23:23:56)这种格式可以使用DATE()函数用来返回日期条件查询的部分,如下处理:
代码如下
|
复制代码
|
select * from product where Date(add_time) = '2019-01-12'
|
2.timestamp()函数来查询:
如果按照日期+时间模式(2019-01-12 23:23:56—时间精确到秒)查询数据库,则可以使用timestamp()函数来查询:
代码如下
|
复制代码
|
select * from product where timestamp(add_time) = '2019-01-12 23:23:56';
|
或者查询一个时间范围,可以用:
代码如下
|
复制代码
|
select * from product where timestamp(add_time) between '2019-01-12 03:23:56' and '2019-01-12 23:23:56';
|
3.查询指定月份的数据记录:
如果你要查询2013年1月份加入的产品:
代码如下
|
复制代码
|
select * from product where date(add_time) between '2019-01-01' and '2019-01-31'
你还可以这样写:
select * from product where Year(add_time) = 2019 and Month(add_time) = 1
|
4. 查询与现在距离一定时间范围内的数据记录:
TO_DAYS()
如果你要查询最后30天以内的数据,用TO_DAYS()函数转换时间字段进行比较:
代码如下
|
复制代码
|
mysql> SELECT something FROM table
WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30;
|
DAYOFWEEK(date)
返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。这些索引值对应于ODBC标准。
代码如下
|
复制代码
|
mysql> select DAYOFWEEK('1998-02-03');
-> 3
|
WEEKDAY(date)
返回date的星期索引(0=星期一,1=星期二, ……6= 星期天)。
代码如下
|
复制代码
|
mysql> select WEEKDAY('1997-10-04 22:23:00');
-> 5
mysql> select WEEKDAY('1997-11-05');
-> 2
|
DAYOFMONTH(date)
返回date的月份中日期,在1到31范围内。
代码如下
|
复制代码
|
mysql> select DAYOFMONTH('1998-02-03');
-> 3
|
DAYOFYEAR(date)
返回date在一年中的日数, 在1到366范围内。
代码如下
|
复制代码
|
mysql> select DAYOFYEAR('1998-02-03');
-> 34
|
MONTH(date)
返回date的月份,范围1到12。
代码如下
|
复制代码
|
mysql> select MONTH('1998-02-03');
-> 2
|
DAYNAME(date)
返回date的星期名字。
代码如下
|
复制代码
|
mysql> select DAYNAME("1998-02-05");
-> 'Thursday'
|
MONTHNAME(date)
返回date的月份名字。
代码如下
|
复制代码
|
mysql> select MONTHNAME("1998-02-05");
-> 'February'
|
QUARTER(date)
返回date一年中的季度,范围1到4。
代码如下
|
复制代码
|
mysql> select QUARTER('98-04-01');
-> 2
|
select * from order where created > now() - 259200
目的是为了
查询
三天内的订单, 理解上259200是秒数,转化为72个小时,也就是3天。
但是事与愿违。
mysql
中
时间算减法居然不是这么算的。他是这么算的:...
root@test 02:38:59>show create table xc\G
*************************** 1. row ***************************
Table: xc
Create Table: CR
SQL减去指定天数
SELECT * from 表名 where DATE_FORMAT(时间字段,"%Y-%m-%d") = DATE_ADD(输入时间,INTERVAL -1 DAY);
/** ...
select * from 表名 where to_days(时间字段名) = to_days(now());
SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名) <= 1
SELECT * ...
select * from 表名 where to_days(时间字段名) = to_days(now());
SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名) = 1
SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 7 DAY)
查询
当前这
MySQL
中
Case When 语句可以实现多
条件
查询
的功能,比如可以根据不同的
条件
对
查询
结果进行分类,根据分类结果对数据进行汇总、计数或统计等操作。
Case When 语句的基本语法如下:
select
case [when condition1 then result1]
[when condition2 then result2]
[when condition3 then result3]
[else default_result]
from table_name;
其
中
,when 后的
条件
可以是表达式、逻辑运算符、比较运算符等,如果 condition1 结果为 true,就返回 result1,否则继续
判断
condition2,以此类推。
比如,如果有这样一张用户表,其
中
包含了用户的姓名、性别、年龄、所在城市等信息:
CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
gender ENUM('male', 'female') NOT NULL,
age INT NOT NULL,
city VARCHAR(50) NOT NULL,
PRIMARY KEY (id)
INSERT INTO users (name, gender, age, city) VALUES
('Tom', 'male', 26, 'Beijing'),
('Lily', 'female', 23, 'Shanghai'),
('Mary', 'female', 32, 'Shenzhen'),
('Jack', 'male', 38, 'Guangzhou'),
('Lucy', 'female', 24, 'Hangzhou'),
('David', 'male', 29, 'Shanghai'),
('Emma', 'female', 27, 'Beijing'),
('Mike', 'male', 31, 'Guangzhou'),
('Ella', 'female', 28, 'Shenzhen'),
('John', 'male', 36, 'Hangzhou');
我们可以使用 Case When 语句对用户数据进行分类,比如按照性别进行分类:
SELECT
gender,
COUNT(*) AS count
users
GROUP BY
gender
ORDER BY
WHEN gender='male' THEN 1
WHEN gender='female' THEN 2
ELSE 3
-- 输出结果如下:
-- gender count
-- male 4
-- female 6
这里用 Case When 语句对性别进行分类,count 统计每种分类的数量,同时使用 order by 指定分类的顺序。
除了精确匹配外,Case When 语句还可以使用 like 或 in 等
条件
表达式进行模糊匹配,比如按照年龄段进行分类:
SELECT
WHEN age < 20 THEN '少年'
WHEN age BETWEEN 20 AND 30 THEN '青年'
WHEN age BETWEEN 30 AND 40 THEN '
中
年'
ELSE '老年'
END AS age_group,
COUNT(*) AS count
users
GROUP BY
age_group;
-- 输出结果如下:
-- age_group count
-- 青年 4
--
中
年 3
-- 老年 3
这里将用户按照年龄段进行分类,count 统计每种分类的数量,同时使用 as 将分类结果命名为 age_group。
Case When 语句可以灵活地使用在各种
查询
场景
中
,比如我们可以根据不同的
条件
返回不同的文本、数值或
日期
格式
,也可以从多个字段
中
派生出新的字段等。需要注意的是,Case When 语句也需要谨慎使用,因为过多的分支会降低
查询
性能,建议根据实际需求进行调整。