Есть ли способ выбрать по части даты в SQL? - PullRequest
0 голосов
/ 09 марта 2009

У меня есть столбец datetime в таблице MySQL, и я хотел бы выбрать записи, которые имеют один и тот же год, месяц и день (но, возможно, разные часы и минуты). В других случаях я бы выбрал те же с тем же годом и месяцем. Есть ли способ сделать это?

Ответы [ 8 ]

12 голосов
/ 09 марта 2009

Самый быстрый способ сделать это - использовать BETWEEN, например:

SELECT fields FROM table WHERE
datecolumn BETWEEN '2001-01-01 00:00:00' AND '2001-12-31 23:59:59';
6 голосов
/ 09 марта 2009

Вы можете использовать некоторые из функций даты и времени MySQL , чтобы извлечь / сравнить части интересующей вас даты.

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

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

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

Вы также можете сделать

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

или

SELECT * FROM table WHERE datetime LIKE '2007-05%'
0 голосов
/ 09 марта 2009

Да, вы хотите использовать одну из следующих функций даты в вашем выборе

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

Я знаю, что ухожу от времени, но концепция та же самая ... предположим, что время и дата похожи на: 12/25/2009

SELECT * FROM table
WHERE SUBSTRING(datetime, 6, 4) = targetYear
AND SUBSTRING(datetime, 0, 2) = targetMonth
0 голосов
/ 09 марта 2009
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, без необходимости выполнять преобразование строк или тому подобное.

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

Есть функции , такие как year () и hour (), которые сделают это за вас.

 select * from users where year(lastlogin) = year(now())
0 голосов
/ 09 марта 2009

Я видел преобразование даты, выполненное таким образом ранее на сервере SQL (не уверен, работает ли это в MySQL):

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

(Это только пример того, как преобразовать дату в ГГГГ-ММ-ДД)

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