SQL查询中的日期格式

时间:2013-06-11 20:37:35

标签: php mysql sql

我有桌子:

生日

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的所有名称的最佳方式?

3 个答案:

答案 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)

如果dateDATEDATETIMETIMESTAMP列,并且您希望索引有机会使用:

SELECT name
FROM tableX
WHERE date >= '1990-04-01'
  AND date  < '1990-05-01' ;

(date)上的索引会很好。更好的是(date, name)上的索引。