Как использовать выбор с условием даты? - PullRequest
7 голосов
/ 30 марта 2009

Как мне сравнивать даты в sqlserver? Например:

Выберите * из Пользователей, где RegistrationDate> = '1/20/2009'

(RegistrationDate имеет тип datetime)

Спасибо

Ответы [ 6 ]

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

Если вы введете

SELECT * FROM Users WHERE RegistrationDate >= '1/20/2009' 

автоматически преобразует строку '1/20/2009' в формат DateTime для даты 1/20/2009 00:00:00. Таким образом, используя >=, вы должны получить каждого пользователя, чья дата регистрации 20.01.2009 или более поздняя.

Редактировать: я разместил это в разделе комментариев, но я, вероятно, должен связать это и здесь. В этой статье подробно рассматриваются некоторые способы работы с DateTime в ваших запросах: http://www.databasejournal.com/features/mssql/article.php/2209321/Working-with-SQL-Server-DateTime-Variables-Part-Three---Searching-for-Particular-Date-Values-and-Ranges.htm

2 голосов
/ 30 марта 2017
select sysdate from dual
30-MAR-17

select count(1) from masterdata where to_date(inactive_from_date,'DD-MON-YY'
between '01-JAN-16' to '31-DEC-16'

12998 rows
1 голос
/ 30 марта 2009
Select * from Users where RegistrationDate >= CONVERT(datetime, '01/20/2009', 103)

безопасен в использовании, независимо от настроек даты на сервере.

Полный список стилей можно найти здесь .

0 голосов
/ 21 декабря 2016

, если вы не хотите, чтобы вас беспокоил формат даты, вы можете сравнить столбец с общим форматом даты, например

select * From table where cast (RegistrationDate as date) between '20161201' and '20161220'

убедитесь, что дата в формате DATE, в противном случае cast (col as DATE)

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

Другая функция - между :

Select * from table where date between '2009/01/30' and '2009/03/30'
0 голосов
/ 30 марта 2009

Я всегда получаю дату фильтра в datetime, без времени (время = 00: 00: 00.000)

DECLARE @FilterDate  datetime --final destination, will not have any time on it
DECLARE @GivenDateD  datetime --if you're given a datetime
DECLARE @GivenDateS  char(23) --if you're given a string, it can be any valid date format, not just the yyyy/mm/dd hh:mm:ss.mmm that I'm using

SET @GivenDateD='2009/03/30 13:42:50.123'
SET @GivenDateS='2009/03/30 13:42:50.123'

--remove the time and assign it to the datetime
@FilterDate=dateadd(dd, datediff(dd, 0, @FilterDateD), 0)
--OR
@FilterDate=dateadd(dd, datediff(dd, 0, @FilterDateS), 0)

Вы можете использовать это предложение WHERE для фильтрации:

WHERE ColumnDateTime>=@FilterDate AND ColumnDateTime<@FilterDate+1

это даст все матчи, которые начнутся в день или после начала 2009/03/30 или до полного дня 2009/03/30

Вы можете сделать то же самое для параметров фильтра START и END. Всегда устанавливайте дату начала в качестве даты и времени и используйте нулевое время в нужный день, а также ставьте условие "> =". Всегда делайте конечную дату нулевым временем на следующий день после того, как вы хотите, и используйте «<». При этом вы всегда будете правильно включать любые даты, независимо от временной части даты. </p>

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