Подтвердить что ты не робот

Как запросить поле DATETIME, используя только дату в SQL Server?

Простой вопрос, но я пока не могу его решить...

У меня есть таблица TEST с полем DATETIME, например:

ID NAME DATE
1 TESTING 2014-03-19 20:05:20.000

Что мне нужно, так это запрос ниже возвращает эту строку и каждую строку с датой = 03/19/2014, независимо от времени:

select * from test where date = '03/19/2014';

Но он не возвращает строк. Только способ работы указывает также время:

select * from test where date = '03/19/2014 20:03:02.000';

Спасибо заранее!

4b9b3361

Ответ 1

диапазон использования или функция DateDiff

 select * from test 
 where date between '03/19/2014' and '03/19/2014 23:59:59'

или

 select * from test 
 where datediff(day, date, '03/19/2014') = 0

Другие варианты:

  • Если у вас есть контроль над схемой базы данных, и вам не нужно время, вытащите его.

  • или, если вы должны сохранить его, добавьте вычисленный атрибут столбца, у которого отключена временная часть значения даты...

Alter table Test Add DateOnly As DateAdd(day, datediff(day, 0, date), 0)

или, в более поздних версиях SQL Server...

Alter table Test Add DateOnly As Cast(DateAdd(day, datediff(day, 0, date), 0) as Date)

тогда вы можете написать свой запрос просто:

select * from test 
where DateOnly = '03/19/2014'

Ответ 2

Простой ответ;

select * from test where cast ([date] as date) = '03/19/2014';

Ответ 4

Попробуйте это

 select * from test where Convert(varchar, date,111)= '03/19/2014'

Ответ 5

вы можете попробовать это

select * from test where DATEADD(dd, 0, DATEDIFF(dd, 0, date)) = '03/19/2014';

Ответ 6

select * from test 
where date between '03/19/2014' and '03/19/2014 23:59:59'

Это реальный плохой ответ. По двум причинам.

1. Что происходит со временем, например, 23.59.59.700 и т.д. Времена больше 23:59:59 и на следующий день.

2. Поведение зависит от типа данных. Запрос ведет себя по-разному для типов datetime/date/datetime2.

Тестирование с 23: 59: 59.999 делает его еще хуже, потому что в зависимости от типа данных вы получаете разные округления.

select convert (varchar(40),convert(date      , '2014-03-19 23:59:59.999'))
select convert (varchar(40),convert(datetime  , '2014-03-19 23:59:59.999'))
select convert (varchar(40),convert(datetime2 , '2014-03-19 23:59:59.999'))

- Для даты значение "нарезанное". - Для даты и времени значение округляется до следующей даты. (Ближайшее значение). - Для datetime2 значение является точным.

Ответ 7

Вы можете использовать этот подход, который усекает временную часть:

select * from test
where convert(datetime,'03/19/2014',102) = DATEADD(dd, DATEDIFF(dd, 0, date), 0)

Ответ 8

Существует проблема с датами и языками, а способ избежать этого - запрашивать даты с этим форматом YYYYMMDD.

Этот путь ниже должен быть самым быстрым в соответствии со ссылкой ниже. Я проверил в SQL Server 2012, и я согласен со ссылкой.

select * from test where date >= '20141903' AND date < DATEADD(DAY, 1, '20141903');

http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/16/bad-habits-to-kick-mishandling-date-range-queries.aspx

С уважением.

Ответ 9

Проверьте этот запрос.

SELECT *,DATE(chat_reg_date) AS is_date,TIME(chat_reg_time) AS is_time FROM chat WHERE chat_inbox_key='$chat_key' 
                         ORDER BY is_date DESC, is_time DESC

Ответ 10

Просто используйте это в своем предложении WHERE.

Часть "SubmitDate" ниже - это имя столбца, поэтому вставьте свой собственный.

Это вернет только часть результатов "Года", опуская минуты и т.д.

Where datepart(year, SubmitDate) = '2017'

Ответ 11

select * from invoice where TRANS_DATE_D>= to_date  ('20170831115959','YYYYMMDDHH24MISS')
and TRANS_DATE_D<= to_date  ('20171031115959','YYYYMMDDHH24MISS');

Ответ 12

-- Reverse the date format
-- this false:
    select * from test where date = '28/10/2015'
-- this true:
    select * from test where date = '2015/10/28'