繁体   English   中英

SQL 日期选择

[英]SQL date selecting

我希望能够 select 月份和年份与我正在搜索的所有数据库行相同。 由于 DATE 字段有年、月和日,我如何搜索年和月?

SELECT * 
FROM tblTableName 
WHERE Month(ColumnDate) = Month(MyDate) 
    AND Year(ColumnDate) = Year(MyDate)
SELECT *
FROM myTable
WHERE ( YEAR(myfield) = '2009')
  AND ( MONTH(myfield) = '1')

最有效的是创建所需范围的开始日期和结束日期,以便将日期作为单个值进行比较,而不是从每个日期中提取年份和月份属性。

例子:

select SomeField
from SomeTable
where SomeDate >= ? and SomeDate < ?

(请注意,第一个比较是包含性的,第二个是排除性的。)

创建开始日期和结束日期以用作参数:(C# 中的示例)

DateTime start = new DateTime(date.Year, date.Month, 1)
DateTIme end = start.AddMonths(1);

MySQL 中

SELECT *
FROM   mytable
WHERE  date >= STR_TO_DATE(CONCAT(EXTRACT(YEAR_MONTH FROM @mydate), '01'), '%Y%m%d')
   AND date < STR_TO_DATE(CONCAT(EXTRACT(YEAR_MONTH FROM @mydate), '01'), '%Y%m%d') + INTERVAL 1 MONTH

这将有效地使用date字段上的索引。

这取决于您使用的数据库后端。 在 SQl 服务器中我会使用

where year(datefield) = @year and month (datefield) - @month 

去做这个。

或者您可以通过创建日期范围来构建 where 子句

其中 20090101 和 20090201 之间的日期字段

您将需要在 mysql 中使用MONTH()YEAR()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM