Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Ошибка при конвертации даты и времени  [new]
komil
Member

Откуда: 2shanbe
Сообщений: 134
Здравствуйте, уважаемые.

Второй день голову ломаю но не как не могу сообразить в чем моя ошибка, ну предполагаю что ошибка в конвертации даты и времени но у меня уже не остается вариантов как обратиться к вам ГУРУ.
Собственно и скрипт:




SELECT CONVERT(char(10), clients.DateCreated, 104) + ' ' + CONVERT(char(10), clients.DateCreated, 108) as DateCreated,
clients_types.pname, clients.LName, clients.FName, receipts.SourceId, receipts.Amount, a.LName as toLName, a.FName as toFName,
receipts.TargetId, payments.PaymentNet, payments.PType, receipts.Comment, receipts.BalanceAfter, users.FName as UserFName,
users.LName as UserLName, receipts.UserId FROM payments
INNER JOIN receipts ON receipts.ReceiptTranId=payments.TranId
INNER JOIN clientsON receipts.SourceId=agents.AgentId
INNER JOIN clients a ON receipts.TargetId=a.AgentId
INNER JOIN users ON users.UserId=receipts.UserId
INNER JOIN clients_types ON clients_types.ptype=clients.ptype
WHERE clients.DateCreated BETWEEN CAST('14.09.2011 00:00:00' AS DATETIME) AND CAST('14.09.2011 23:59:59' AS DATETIME)


Ошибка которую выдает скуль:


Msg 242, Level 16, State 3, Line 1
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

Да понимаю что скуль сказал где моя ошибка, но в чем моя ошибка вроде все по книжке.
19 сен 11, 22:11    [11301770]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при конвертации даты и времени  [new]
Glory
Member

Откуда:
Сообщений: 104751
https://www.sql.ru/faq/faq_topic.aspx?fid=109
19 сен 11, 22:16    [11301787]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при конвертации даты и времени  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
komil
CAST('14.09.2011 00:00:00' AS DATETIME) AND CAST('14.09.2011 23:59:59' AS DATETIME)

так писать не нужно.

...CAST('20110914 00:00:00' AS DATETIME) AND CAST('20110914 23:59:59' AS DATETIME)
или
...CAST('2011-09-14T00:00:00' AS DATETIME) AND CAST('2011-09-14T23:59:59' AS DATETIME)
А вообще - BOL на тему CAST и CONVERT
19 сен 11, 22:17    [11301795]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при конвертации даты и времени  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
kDnZP
komil
CAST('14.09.2011 00:00:00' AS DATETIME) AND CAST('14.09.2011 23:59:59' AS DATETIME)

так писать не нужно.

...CAST('20110914 00:00:00' AS DATETIME) AND CAST('20110914 23:59:59' AS DATETIME)
или
...CAST('2011-09-14T00:00:00' AS DATETIME) AND CAST('2011-09-14T23:59:59' AS DATETIME)
А вообще - BOL на тему CAST и CONVERT
Лучше так:
clients.DateCreated >= '20110914' AND clients.DateCreated < '20110914'
20 сен 11, 09:19    [11302624]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при конвертации даты и времени  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Описался:
iap
Лучше так:
clients.DateCreated >= '20110914' AND clients.DateCreated < '20110915'
20 сен 11, 09:21    [11302633]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при конвертации даты и времени  [new]
komil
Member

Откуда: 2shanbe
Сообщений: 134
Народ спасибо за поддержку но если в этот запрос я задаю второе число месяца то все робит без проблем, а свыше 14-и выдает ошибку.

Не ужели не кто не использовал оператор CAST?
20 сен 11, 09:34    [11302695]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при конвертации даты и времени  [new]
komil
Member

Откуда: 2shanbe
Сообщений: 134
iap, Мне необходимо выбрать в интервале одного дня, по этому последний вариант не оптимален для меня. Возможны другие варианты нет?
20 сен 11, 09:35    [11302702]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при конвертации даты и времени  [new]
Glory
Member

Откуда:
Сообщений: 104751
komil
Народ спасибо за поддержку но если в этот запрос я задаю второе число месяца то все робит без проблем, а свыше 14-и выдает ошибку.

Вы ссылку то открывали ?
20 сен 11, 09:40    [11302728]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при конвертации даты и времени  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31960
komil
Народ спасибо за поддержку но если в этот запрос я задаю второе число месяца то все робит без проблем, а свыше 14-и выдает ошибку.

Не ужели не кто не использовал оператор CAST?
Использовали, пока не умели программировать.

Если нет возможности работать с датами в правильном формате, используйте CONVERT, но лучьше всё таки правильный формат.

komil
iap, Мне необходимо выбрать в интервале одного дня, по этому последний вариант не оптимален для меня. Возможны другие варианты нет?
iap показал единственно правильный вариант для выборки в интервале одного дня.

Ваш вариант с BETWEEN неправильный, он может выздавать ошибки в зависимости от версии сиквела и типа данных - за ним придётся постоянно приглядывать и постоянно его модифицировать.
20 сен 11, 09:41    [11302736]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при конвертации даты и времени  [new]
Glory
Member

Откуда:
Сообщений: 104751
komil
iap, Мне необходимо выбрать в интервале одного дня, по этому последний вариант не оптимален для меня

select CAST('2011-09-14 23:59:59' AS DATETIME), CAST('2011-09-14 23:59:59.666' AS DATETIME)
Какая из дат попадет в ваши BETWEEN, а какая не попадет ?
20 сен 11, 09:42    [11302749]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при конвертации даты и времени  [new]
komil
Member

Откуда: 2shanbe
Сообщений: 134
Glory
komil
iap, Мне необходимо выбрать в интервале одного дня, по этому последний вариант не оптимален для меня

select CAST('2011-09-14 23:59:59' AS DATETIME), CAST('2011-09-14 23:59:59.666' AS DATETIME)
Какая из дат попадет в ваши BETWEEN, а какая не попадет ?



Спасибо огромное, помогло вот это:

WHERE clients.DateCreated BETWEEN CAST('2011-09-14 00:00:00.000' AS DATETIME) AND CAST('2011-09-14 23:59:59.666' AS DATETIME)
20 сен 11, 10:33    [11303095]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при конвертации даты и времени  [new]
Glory
Member

Откуда:
Сообщений: 104751
komil
Спасибо огромное, помогло вот это:

WHERE clients.DateCreated BETWEEN CAST('2011-09-14 00:00:00.000' AS DATETIME) AND CAST('2011-09-14 23:59:59.666' AS DATETIME)

Про это между прочим и написано в ссылке
А правильнее сравнение делать так, как предложил iap
20 сен 11, 10:36    [11303114]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при конвертации даты и времени  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
komil
Спасибо огромное, помогло вот это:


А если б вы открыли указанную ссылку и прочли там первое предложение, то поняли что это - временная помощь, правильная синтаксически, но ошибочная стратегически.
20 сен 11, 11:15    [11303464]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при конвертации даты и времени  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31960
komil
Спасибо огромное, помогло вот это:

WHERE clients.DateCreated BETWEEN CAST('2011-09-14 00:00:00.000' AS DATETIME) AND CAST('2011-09-14 23:59:59.666' AS DATETIME)
Это сейчас политкорректно называют "простокод", а программистов "простокодерами" :-)

Этот код придётся постоянно править, поскольку его выполнение может зависеть от многих вещей, типа версии сервера.

Просто запомните - для большинства типов данных BETWEEN нельзя использовать для условий задания диапазона. Если не понимаете, почему, лучьше не используйте его никогда.
20 сен 11, 12:18    [11304103]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при конвертации даты и времени  [new]
новичок((((
Guest
Помогите пожалуйста, передаю дату на сервер в формате YYYY-MM-DD, но в базе хранятся даты в формате dd.mm.yyyy как с помощью CONVERT преобразовать дату в формат dd.mm.yyyy?
1 ноя 11, 09:43    [11530538]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при конвертации даты и времени  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
https://www.sql.ru/faq/faq_topic.aspx?fid=109
1 ноя 11, 10:00    [11530627]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при конвертации даты и времени  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
новичок((((
Помогите пожалуйста, передаю дату на сервер в формате YYYY-MM-DD, но в базе хранятся даты в формате dd.mm.yyyy как с помощью CONVERT преобразовать дату в формат dd.mm.yyyy?
Какой тип передаёте и какой тип хранится?
1 ноя 11, 10:25    [11530765]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить