Выбор даты SQL
Я хочу иметь возможность выбрать все строки базы данных, где месяц и год совпадают с тем, что я ищу. Так как в поле ДАТА есть год, месяц и день, как искать по году и месяцу?
6 ответов
SELECT *
FROM myTable
WHERE ( YEAR(myfield) = '2009')
AND ( MONTH(myfield) = '1')
SELECT *
FROM tblTableName
WHERE Month(ColumnDate) = Month(MyDate)
AND Year(ColumnDate) = Year(MyDate)
Наиболее эффективным является создание начальной и конечной даты требуемого диапазона, чтобы вы сравнивали даты как одно значение, а не извлекали свойства года и месяца из каждой даты.
Пример:
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 Server я бы использовал
where year(datefield) = @year and month (datefield) - @month
сделать это.
или вы можете построить предложение where, создав диапазон дат
где поле даты между 20090101 и 20090201