Преобразование не удалось преобразовать дату и время из строки - PullRequest
1 голос
/ 21 апреля 2011

Я пытаюсь преобразовать мои три параметра в DATETIME, но он не работает.Я получаю сообщение об ошибке, что преобразование не удалось при преобразовании даты и времени из строки символов всякий раз, когда я запускаю этот запрос.Возможно, я поступаю неправильно в преобразовании?Если кто-то может предоставить какие-либо отзывы.

    @month varchar,
    @day varchar,
    @year varchar

AS
DECLARE @date DATETIME
SET @date = Convert(DateTime, @month + '/' + @day + '/' + @year, 101)

Select *
From events
Where (EDate = @date) OR EDateEnd = @date OR @date Between EDate AND EDateEnd
Order By EDate ASC

Ответы [ 3 ]

3 голосов
/ 21 апреля 2011

Вам необходимо установить размер ваших параметров.Вероятно, что-то вроде

@month varchar(2),
@day varchar(2),
@year varchar(4)
0 голосов
/ 21 апреля 2011

Это должно работать. Убедитесь, что вы указали допустимые значения в своих параметрах.

Обновление

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

SET @date = Convert(DateTime, @month + '/' + @day + '/' + @year)
0 голосов
/ 21 апреля 2011

Это всего лишь предположение, поскольку показанная функция преобразования должна работать с правильными параметрами.

Вы проходите год как двузначное число? Если это так, попробуйте передать его как полный четырехзначный год (которого ожидает формат «101») ИЛИ измените его на

SET @date = Convert(DateTime, @month + '/' + @day + '/' + @year, 1) 

если вы проходите год с двумя цифрами.

(см. Разницу с веком и без века здесь: http://msdn.microsoft.com/en-us/library/ms187928.aspx)

EDIT

У меня есть второе предположение ... Возможно, ошибка не в той строке, где вы явно конвертируете параметры в переменную Datetime. Это сожгло меня раньше ... Ошибка МОЖЕТ происходить в следующей строке:

Where (EDate = @date) OR EDateEnd = (@date) OR @date Between EDate AND EDateEnd 

, если столбец EDate или EDateEnd не обязательно является столбцом DateTime. Может случиться так, что ТАК содержат значения, которые не могут быть преобразованы в DateTime. (Это могут быть поля типа char с сохраненной в них строкой DateTime или фактические поля Date с сохраненными в них нулевыми значениями.)

Однако без дополнительной информации о реальной схеме базы данных трудно сказать. Лучшее, что мы можем сделать, это угадать.

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