Выбор даты SQL - PullRequest
       19

Выбор даты SQL

3 голосов
/ 10 марта 2009

Я хочу иметь возможность выбрать все строки базы данных, где месяц и год совпадают с тем, что я ищу. Так как в поле ДАТА есть год, месяц и день, как мне искать по году и месяцу?

Ответы [ 6 ]

6 голосов
/ 10 марта 2009
SELECT * 
FROM tblTableName 
WHERE Month(ColumnDate) = Month(MyDate) 
    AND Year(ColumnDate) = Year(MyDate)
3 голосов
/ 10 марта 2009

Наиболее эффективным является создание начальной и конечной даты требуемого диапазона, чтобы вы сравнивали даты как одно значение, а не извлекали свойства года и месяца из каждой даты.

Пример:

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

(Обратите внимание, что первое сравнение включительно, а индекс - эксклюзив.)

Создать дату начала и окончания для использования в качестве параметров: (пример в C #)

DateTime start = new DateTime(date.Year, date.Month, 1)
DateTIme end = start.AddMonths(1);
3 голосов
/ 10 марта 2009
SELECT *
FROM myTable
WHERE ( YEAR(myfield) = '2009')
  AND ( MONTH(myfield) = '1')
2 голосов
/ 10 марта 2009

В 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.

1 голос
/ 10 марта 2009

Это будет зависеть от того, какую базу данных вы используете. В SQl Server я бы использовал

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

чтобы сделать это.

или вы можете создать предложение where, создав диапазон дат

где поле даты между 20090101 и 20090201

0 голосов
/ 10 марта 2009

Вы захотите использовать МЕСЯЦ () и ГОД () в mysql.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...