2015-08-12 5 views
4

Я пытаюсь отфильтровать некоторые записи по дате, но поле datetime похоже хранится как varchar, и я изо всех сил пытаюсь его преобразовать. Ниже приведен пример данных:преобразовать varchar в поле datetime

ID  DateField 
0002 14/04/1989 01:30 
0003 16/04/1989 09:45 
0004 16/04/1989 06:00 
0005 19/04/1989 01:07 
0006 21/04/1989 16:03 

Когда я использую

cast(Datefield as datetime) 

Я получаю следующее сообщение об ошибке:

Msg 241, Level 16, State 1, Line 1 
Conversion failed when converting date and/or time from character string. 

Edit - это на самом деле отображать результаты в формате даты и времени, но с сообщением об ошибке, почему?

Каков наилучший способ преобразования моего поля даты в действительный формат даты и времени? Благодаря

ответ

2

Использование CONVERT со стилем

CONVERT(DATETIME,Datefield ,103) 

Чтобы найти плохие данные, увидеть, что это возвращает

set dateformat dmy 
select Datefield from table where isdate(where)=0 

Вы должны всегда использовать правильное DATETIME тип данных для хранения даты-времени значения

+0

Спасибо, это дает мне желаемый формат, но все же с тем же сообщением об ошибке, любые идеи почему? Кроме того, что делает код 103? – GullitsMullet

+1

@GullitsMullet - Проверить [Документация] (https://msdn.microsoft.com/en-us/library/ms187928.aspx) – ughai

+0

См. Отредактированный ответ – Madhivanan

2

Попробуйте это. Вам нужно добавить стиль часть для определения формата

SELECT CONVERT(DATETIME, dates, 103) 
FROM (VALUES ('14/04/1989 01:30'), 
       ('16/04/1989 09:45'), 
       ('16/04/1989 06:00'), 
       ('19/04/1989 01:07'), 
       ('21/04/1989 16:03')) cs (dates) 
1

см CAST and CONVERT

вам нужно использовать

select CONVERT(datetime,your_Datefield ,103) 

, потому что ваш your_Datefield проведение значения даты и времени в формате dd/mm/yy.

follow the link, you'll get the explanation.

1

Вы можете получить сообщение об ошибке, поскольку формат datetime по умолчанию - mm/dd/yyyy. Итак, если ваше значение имеет этот формат, тогда он легко конвертируется без ошибок.

Для этого вам необходимо преобразовать формат, который преобразует строку в правильный формат даты и времени. Для этого приведение не будет работать, а конвертировать работу. Вот link для более подробной информации.

Как ваш формат dd/mm/yyyy, вам необходимо использовать формат 103. Просто проверьте это, чтобы понять.

Select convert(datetime, getdate(), 103) 
Смежные вопросы