我有桌子:
生日
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的所有名称的最佳方式?
答案 0 :(得分:4)
SELECT name FROM table WHERE date LIKE '1990-04%'
这里的其他一些答案假设您将日期存储在日期字段中,但我假设您在问题中列出的方式只是一个字符串。继续这个假设,我知道使用LIKE operator会让我使用通配符(%符号)来搜索那个年份和月份的任何内容。也就是说,此查询将匹配从1990-04开始的所有内容,因此有可能出现格式错误的数据,您可能会得到一些不正确的数据(例如日期输入数据库,如'1990-041-12')
答案 1 :(得分:2)
如果它是DATE
值,我建议检查它是否在月份的开始和结束之间。如果您使用DATE_FORMAT
或其他一些功能来截断日期,您将失去任何优化机会:
SELECT name FROM myTable WHERE `date` BETWEEN '1990-04-01' AND '1990-04-30'
如果它是DATETIME
值,请执行此操作以考虑下午9点的4/30/1990等值:
SELECT name FROM myTable WHERE `date` >= '1990-04-01' AND `date` < '1990-05-01'
答案 2 :(得分:0)
如果date
是DATE
或DATETIME
或TIMESTAMP
列,并且您希望索引有机会使用:
SELECT name
FROM tableX
WHERE date >= '1990-04-01'
AND date < '1990-05-01' ;
(date)
上的索引会很好。更好的是(date, name)
上的索引。