我有表:
生日
id | name | date
1 | aaa | 1990-03-02
2 | bbb | 1990-03-12
3 | ccc | 1990-03-25
4 | ddd | 1990-04-25
5 | eee | 1990-04-23
6 | fff | 1990-04-26
7 | ggg | 1990-04-12
选择日期为 1990-04-xx 的所有名称的最佳方法是什么?
SELECT name FROM table WHERE date LIKE '1990-04%'
这里的其他一些答案是假设您将日期存储在日期字段中,但我假设它在您的问题中的布局方式只是一个字符串。按照这个假设,我知道使用LIKE 运算符可以让我使用通配符(% 符号)来搜索具有该年份和月份的任何内容。也就是说,此查询将匹配以 1990-04 开头的任何内容,因此格式错误的数据可能会导致您获得一些不正确的数据(例如,将日期输入到数据库中,例如“1990-041-12”)
如果它是一个DATE
值,我建议检查它是否在月初和月底之间。如果你使用DATE_FORMAT
或其他一些函数来截断日期,你将失去任何优化的机会:
SELECT name FROM myTable WHERE `date` BETWEEN '1990-04-01' AND '1990-04-30'
如果它是一个DATETIME
值,请执行此操作以计算 1990 年 4 月 30 日晚上 9 点之类的值:
SELECT name FROM myTable WHERE `date` >= '1990-04-01' AND `date` < '1990-05-01'
Ifdate
是DATE
or DATETIME
orTIMESTAMP
列,并且您希望索引有机会被使用:
SELECT name
FROM tableX
WHERE date >= '1990-04-01'
AND date < '1990-05-01' ;
一个索引(date)
会很好。更好的是,在(date, name)
.