Преобразование varchar в Datetime - PullRequest
0 голосов
/ 13 января 2011

Почему работает следующий код:

CAST(DateOfAction AS Date)

но этот код не:

CAST(DateOfAction AS Datetime)

примечание: DateOfAction - это поле varchar

Может кто-нибудь объяснить это и дать правильный код?

Ответы [ 4 ]

0 голосов
/ 14 января 2011

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


Кроме того, если это не для преобразования кода для работы на старом сервере, а просто для того, чтобы выиграть времякомпонента, тогда, если у вас есть date на вашем сервере, вы должны иметь datetime2, который будет работать намного лучше.

0 голосов
/ 13 января 2011

Редактировать

После дополнительной информации, которую вы используете yyyymmdd формат Я могу только думать, что проблема в данных. Можете ли вы попробовать следующее?

Каждое значение в том формате, в котором вы думаете?

 SELECT DateOfAction 
 FROM ResAdm.Action 
 WHERE DateOfAction NOT LIKE '[1-2][0-9][0-9][0-9][0-1][0-9][0-3][0-9]'

Является ли каждое значение в диапазоне приемлемым для datetime?

SELECT DateOfAction 
FROM ResAdm.Action 
WHERE cast(DateOfAction as DATE) < '17530101'
0 голосов
/ 14 января 2011

Дата имеет «фиксированное» поведение для некоторых значений, которые вызывали проблемы с datetime.

Например, yyyy-mm-dd не является языковым безопасным, даже если ISO

См. эту статьюТибор Караси этот ТАК вопрос (в комментариях)

0 голосов
/ 13 января 2011

Возможно, потому что ваше поле VARCHAR содержит значение, которое может быть преобразовано в DATE (без значений времени), но отсутствует в любом из допустимых поддерживаемых форматов, поддерживаемых SQL Server CAST и CONVERT.

Поскольку вы не предоставили никаких примеров того, как выглядят ваши данные, мы можем только догадываться .....

Проверьте электронную документацию по SQL Server на CAST и CONVERT для всехподдерживаемые, действительные форматы, которые будут преобразованы в DATETIME.

...