-3

我有表:

生日

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 的所有名称的最佳方法是什么?

4

3 回答 3

4
SELECT name FROM table WHERE date LIKE '1990-04%'

这里的其他一些答案是假设您将日期存储在日期字段中,但我假设它在您的问题中的布局方式只是一个字符串。按照这个假设,我知道使用LIKE 运算符可以让我使用通配符(% 符号)来搜索具有该年份和月份的任何内容。也就是说,此查询将匹配以 1990-04 开头的任何内容,因此格式错误的数据可能会导致您获得一些不正确的数据(例如,将日期输入到数据库中,例如“1990-041-12”)

于 2013-06-11T20:40:16.707 回答
2

如果它是一个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'
于 2013-06-11T20:41:11.387 回答
0

IfdateDATEor DATETIMEorTIMESTAMP列,并且您希望索引有机会被使用:

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

一个索引(date)会很好。更好的是,在(date, name).

于 2013-06-11T20:42:21.723 回答