SQL Server - запрос DateTime хранится в виде строки - PullRequest
2 голосов
/ 12 ноября 2011

У меня есть существующая база данных, которая была настроена (по какой-то причине ??) для хранения даты и времени в виде строки.Мне нужно выполнить запрос для записей, которые были введены между конкретным диапазоном дат, но мне не повезло.

Строковое поле отформатировано как 1/25/2007 - 4:39 PM.Я пробовал запрос ниже, но, конечно, он не работает.Любая помощь будет оценена.

SELECT ID, CUSTOMER, ADD1, ADDZ, CITY, STATE, LASTD, ORDNUM
FROM dcar
WHERE  (STATE = N'OR') AND (CAST(dcar.LASTD AS datetime) BETWEEN convert(smalldatetime, '10/01/2011', 101) AND convert(smalldatetime, '10/31/2011', 101))

PS - Я понятия не имею, почему разработчик решил хранить даты таким образом !!!!

Ответы [ 2 ]

1 голос
/ 12 ноября 2011

Я думаю, что вы должны иметь возможность преобразовывать поле как дату и время, если вы удалите черту между датой и временем с помощью функции REPLACE, например:

SELECT ID, CUSTOMER, ADD1, ADDZ, CITY, STATE, LASTD, ORDNUM
FROM dcar
WHERE  (STATE = N'OR') AND
CAST(REPLACE(dcar.LASTD, ' -', '') AS DATETIME) BETWEEN '10/01/2011' AND '10/31/2011'
0 голосов
/ 12 ноября 2011

Похоже, вы не используете временную часть сохраненного значения.Если это так, это может работать для вас:

Используйте функции манипуляции со строками (http://msdn.microsoft.com/en-us/library/ms181984.aspx), чтобы извлечь часть даты в строке, а затем используйте convert (), чтобы преобразовать ее в дату и время. Вы можете, например,используйте CHARINDEX (), чтобы найти индекс «-», а затем используйте SUBSTRING (), чтобы получить символы до этой точки. Затем используйте convert, передавая соответствующее значение стиля, как описано в http://msdn.microsoft.com/en-us/library/ms187928.aspx. * 1006.*

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