T- Sql дата и время не удалось преобразовать - PullRequest
0 голосов
/ 28 февраля 2012

Все мои столбцы varchar, поэтому я использовал общую таблицу выражений для преобразования [Column 0] в datetime, поскольку [Column 0] содержит дату в этом формате 2012-02-28 00:00:08.000

WITH pss AS 
(
select CONVERT(datetime, [Column 0]) as t, [Column 1], [Column 2], [Column 3], [Column 4], [Column 5], [Column 6]
from PWS where [Column 0]  like '%2/28%'
)
select *from pss where datepart(HOUR,[t]) >= '11' AND datepart(HOUR,[t]) <= '12'

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

Сообщение 242, Уровень 16, Состояние 3, Строка 1
Преобразование типа данных varchar в тип данных datetime привело к значению вне допустимого диапазона.

Ответы [ 3 ]

2 голосов
/ 28 февраля 2012

Вам также необходимо предоставить подсказку с помощью CONVERT относительно структуры даты в varchar.Последовательность ymd будет распознана как 102:

convert(datetime, '2012-02-28 00:00:08.000', 102)

См. http://msdn.microsoft.com/en-us/library/ms187928.aspx для описания CONVERT и доступных стилей даты и времени

0 голосов
/ 29 февраля 2012

Если ничего не помогло, я бы использовал курсор * для циклического прохождения каждой строки, а затем для каждой строки пытался бы преобразовать значение [Столбец 0] в DateTime. Окружите попытку CONVERT блоком TRY..CATCH, затем в блоке CATCH выведите некоторую диагностику, чтобы можно было точно определить, какая строка вызвала ошибку.

ПРИМЕЧАНИЕ *: да, курсоров обычно следует избегать, но в этой диагностической ситуации я думаю, что это полезно.

0 голосов
/ 28 февраля 2012

Значения для типов данных datetime ранее 01 января 1753 года не допускаются в SQL Server.SQL Server принимает даты в диапазоне от 1753 до 9999 года.Если столбец 0 в вашей таблице содержит даты ранее, чем 01 января 1753 г., у вас может быть такая проблема.

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