В sqlserver, как мне сравнить даты? Например:Как использовать select с условием даты?
* Выберите из пользователей, где RegistrationDate> = '1/20/2009'
(RegistrationDate является DateTime типа)
Благодаря
В sqlserver, как мне сравнить даты? Например:Как использовать select с условием даты?
* Выберите из пользователей, где RegistrationDate> = '1/20/2009'
(RegistrationDate является DateTime типа)
Благодаря
Если вы положили в
SELECT * FROM Users WHERE RegistrationDate >= '1/20/2009'
он автоматически преобразует строку '1/20/2009'
в формат DateTime
на дату 1/20/2009 00:00:00
. Таким образом, используя >=
, вы должны получить каждого пользователя, чья дата регистрации - 1/20/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
Select * from Users where RegistrationDate >= CONVERT(datetime, '01/20/2009', 103)
безопасен в использовании, независимо от настройки даты на сервере.
Полный список стилей можно найти here.
Я всегда получаю дату фильтра в 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 ColumnDateTime>[email protected] AND ColumnDateTime<@FilterDate+1
это даст все совпадения, которые находятся на или после начала дня в период 2009/03/30 до и в течение полного дня в 2009/03/30
Вы можете сделать то же самое для параметров фильтра START и END как Что ж. Всегда делайте дату начала datetime и используйте нулевое время в тот день, когда хотите, и сделайте условие «> =». Всегда делайте конечную дату нулевым временем на следующий день после того, как захотите, и используйте «<». При этом вы всегда будете включать любые даты должным образом, независимо от временной части даты.
Еще одной особенностью является между:
Select * from table where date between '2009/01/30' and '2009/03/30'
, если вы не хотите беспокоить формат даты, вы могли бы сравнить колонки с общим форматом даты, например
select * From table where cast (RegistrationDate as date) between '20161201' and '20161220'
удостоверьтесь, что дата указана в формате DATE, в противном случае cast (col as DATE)
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
благодарит много «Панга» за редактирование моего комментария, –
Дополнительную информацию о типах данных DateTime и запросах SQL Server можно найти здесь: http://www.databasejournal.com/features/mssql/article.php/2209321/Working-with-SQL-Server-DateTime-Variables -Part-Three --- Search-for-Particular-Date-Values-and-Ranges.htm – TheTXI