有没有办法在SQL中使用日期的一部分进行SELECT?

时间:2009-03-09 18:05:37

标签: sql mysql

我在MySQL表中有一个datetime列,我想选择具有相同年,月和日(但可能是不同的小时和分钟)的记录。在其他情况下,我会选择具有相同年份和月份的那些。有没有办法做到这一点?

8 个答案:

答案 0 :(得分:12)

执行此操作的最快方法是使用BETWEEN,例如:

SELECT fields FROM table WHERE
datecolumn BETWEEN '2001-01-01 00:00:00' AND '2001-12-31 23:59:59';

答案 1 :(得分:6)

您可以使用部分MySQL Date and Time Functions来提取/比较您感兴趣的日期部分。

SELECT * FROM table WHERE DATE(datetime1) = DATE(datetime2);

SELECT * FROM table WHERE YEAR(datetime1) = YEAR(datetime2) AND MONTH(datetime1) = MONTH(datetime2)

etc

答案 2 :(得分:0)

我之前在SQL服务器中看到过这样的日期转换(不确定这是否适用于MySQL):

select convert(varchar(10), getdate(), 120)

(这只是如何将日期转换为YYYY-MM-DD的一个例子)

答案 3 :(得分:0)

functions之类的年份()和小时()会为你做这件事。

 select * from users where year(lastlogin) = year(now())

答案 4 :(得分:0)

SELECT
  foo
FROM
  FooTable
WHERE
  DATEADD(dd, 0, DATEDIFF(dd, 0, TheDate)) = DATEADD(dd, 0, DATEDIFF(dd, 0, @SomeDate))

这:DATEADD(dd, 0, DATEDIFF(dd, 0, TheDate))

  • 计算与日期0的日期(以天为单位)
  • 将结果(以天为单位)添加到日期0

有效地将DATETIME值的时间部分设置为00:00:00,而无需进行字符串转换等。

答案 5 :(得分:0)

我知道我要离开时间,但概念是一样的...... 假设日期时间如下:12/25/2009

SELECT * FROM table
WHERE SUBSTRING(datetime, 6, 4) = targetYear
AND SUBSTRING(datetime, 0, 2) = targetMonth

答案 6 :(得分:0)

是的,您想在选择中使用以下date functions之一

答案 7 :(得分:-1)

您也可以

SELECT * FROM table WHERE datetime LIKE '2008-08-01%

SELECT * FROM table WHERE datetime LIKE '2007-05%'