2013-12-15 3 views
0

У меня есть таблица, в которой время загрузки файла хранится как переменная datetime, и она таит значения, такие как 2013-12-15 22: 30: 00.030.изменение даты и времени и выборка данных

Как я могу получить данные записи, которые загружаются между двумя датами, используя, за исключением времени. Потому что, если я использую следующую команду я получаю ошибки

select * from story where DateCreated ='2013-12-15'(not working) 
select * from story where DateCreated ='2013-12-15 22:30:00.030' (working but I don't want to specify time) 

Я хочу что-то запрос, как это:

select * from story where DateCreated ='2013-12-15' 
+1

Что RDBMS вы используете? – Mureinik

+0

Я использую sqlserver 2012. нет ошибки, запрос на самом деле просит всю дату и время. но если указать только дату, нет строк, начинающихся – user2621743

ответ

0

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

`select * from story where DateCreated>=DATE('2013-12-15 22:30:00.030') and DateCreated<DATE_ADD(DATE('2013-12-15 22:30:00.030'), INTERVAL 1 DAY)` 
+0

, но как я могу использовать их, если датазапись сохраняется как 2013-12-15 22: 30: 00.030 при создании запроса мне нужно избавиться от времени – user2621743

+0

обновленный код с ваши условия – syabro

0

Проверьте, есть ли в вашей базе данных что-то, что бы преобразовать комбинацию даты и времени в дату. Например, в MySQL, вы могли бы сделать

select * from story where date(DateCreated) ='2013-12-15'

+0

Ужасный совет. Это будет медленно, как черт. Никогда не делайте этого. Никогда. Необходимо использовать DATE() для ВСЕХ записей в таблице – syabro

+0

Я видел ваш пример, похоже, что это будет лучше. Спасибо за указатель. – user2910265

+0

@syabro, поскольку это для SQL Server, это не так уж плохо. Взгляните на этот вопрос на DBA. [Отправлено на сегодняшний день, но это хорошая идея?] (Http://dba.stackexchange.com/questions/34047/cast-to-date-is-sargable-but-is-it-a-good-idea) –

0

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

select * from story where CAST(DateCreated As Date) ='2013-12-15' 
0

Это будет проверять, если файл загружен в определенном интервале, например, на 15 декабря 2013 года:

select * from story 
WHERE DateCreated >= CAST('20131215' AS DATETIME) 
AND DateCreated < DATEADD(DAY, 1, CAST('20131215' AS DATETIME)) 
0

Дата функции, как правило, не воспользоваться индексы (как указано в других ответах), было бы лучше, чем следующее:

Вместо:

SELECT * 
FROM story 
WHERE datecreated = '2013-12-15' 

Использование:

SELECT * 
FROM story 
WHERE datecreated >= '2013-12-15' 
     AND datecreated < '2013-12-16' 
Смежные вопросы