2009-03-30 2 views

ответ

7

Если вы положили в

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

+0

Дополнительную информацию о типах данных 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

1
Select * from Users where RegistrationDate >= CONVERT(datetime, '01/20/2009', 103) 

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

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

0

Я всегда получаю дату фильтра в 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 и используйте нулевое время в тот день, когда хотите, и сделайте условие «> =». Всегда делайте конечную дату нулевым временем на следующий день после того, как захотите, и используйте «<». При этом вы всегда будете включать любые даты должным образом, независимо от временной части даты.

0

Еще одной особенностью является между:

Select * from table where date between '2009/01/30' and '2009/03/30' 
0

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

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

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

1
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 
+0

благодарит много «Панга» за редактирование моего комментария, –

Смежные вопросы