我希望能够选择月份和年份与我搜索的内容相同的所有数据库行。由于DATE字段包含年,月和日,我如何搜索年和月?
答案 0 :(得分:6)
SELECT *
FROM tblTableName
WHERE Month(ColumnDate) = Month(MyDate)
AND Year(ColumnDate) = Year(MyDate)
答案 1 :(得分:3)
SELECT *
FROM myTable
WHERE ( YEAR(myfield) = '2009')
AND ( MONTH(myfield) = '1')
答案 2 :(得分:3)
最有效的方法是创建所需范围的开始日期和结束日期,以便将日期作为单个值进行比较,而不是从每个日期中提取年份和月份属性。
示例:
select SomeField
from SomeTable
where SomeDate >= ? and SomeDate < ?
(请注意,第一次比较是包容性的,而seond是独家的。)
创建用作参数的开始日期和结束日期:( C#中的示例)
DateTime start = new DateTime(date.Year, date.Month, 1)
DateTIme end = start.AddMonths(1);
答案 3 :(得分:2)
在 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
字段上的索引。
答案 4 :(得分:1)
这取决于您使用的数据库后端。在SQl服务器中我会使用
where year(datefield) = @year and month (datefield) - @month
这样做。
或者您可以通过创建日期范围来构建where子句
20090101和20090201之间的日期字段
答案 5 :(得分:0)