Вы можете привести поле к datetime
в запросе:
select cast(YourField as datetime)
from YourTable
where isdate(YourField) = 1
Часть where isdate(YourField) = 1
необходима для фильтрации строк, в которых значение не является действительной датой (это поле nvarchar
)., поэтому в некоторых строках могут быть такие вещи, как abc
!
Но вам действительно следует изменить поле на datetime
в долгосрочной перспективе, как уже было предложено Кристофером в его комментарии.
Castingкак описано выше, всегда подвержено ошибкам из-за множества различных форматов данных в разных странах.
Например, я живу в Германии, где официальный формат даты - dd.mm.yyyy
.
Так что сегодня (9 декабря) равен 9.12.2011
, а выполнение select cast('9.12.2011' as datetime)
на моем компьютере возвращает правильное значение даты и времени.
Другой распространенный формат - mm/dd/yyyy
, поэтому 9 декабря будет 12/9/2011
.
Теперь представьте, что у меня естьполе nvarchar с датой в этом формате на моем немецком компьютере:
select cast('12/9/2011' as datetime)
вернется 12 сентября (вместо 9 декабря)!
Подобных проблем можно легко избежатьиспользуя правильный типдля столбца, в данном случае datetime
.