Не дружим с datetime

Krech79

Нужно дату преобразовать в строку в формате mm-dd-yyyy (либо dd-mm-yyyy)Convert возвращает либо Aug 29 2006 12:00AM, либо "The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value."Помогите, как с ней побороться?
21 ответ

Krech79

Покажите, как делаете преобразование.


Krech79

А какой у вас используется третий параметр в функции CONVERT ?С уважением, Алексей


Krech79

Попробуйте 105 или 110 стиль функции covnert().


Krech79

SELECT CONVERT(varchar(<b>10</b>), @Date, <b>104</b>)


Krech79

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )


Krech79

[quot Krech79]Нужно дату преобразовать в строку в формате mm-dd-yyyy (либо dd-mm-yyyy)Convert возвращает либо Aug 29 2006 12:00AM, либо "The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value."Помогите, как с ней побороться?вообще-то тут вы строку в дату конвертите :))


Krech79

CONVERT(varchar(12),@Data,101) - то что тебе надоCONVERT(varchar(12),@Data,104) - то же, только в русском вариантеCONVERT(varchar(12),@Data,1) - убираем сотню и получаем вместо 1998, просто 98...


Krech79

CONVERT(varchar(8),@Data,101) - так былоCONVERT(varchar(12),@Data,101) - так получилосьнеужели из-за длины??


Krech79

CONVERT(varchar(8),@Data,101) - так былоCONVERT(varchar(12),@Data,101) - так получилосьнеужели из-за длины??
длина никак не связана! попробуйте сами
declare @Data datetime
set @Data=(getdate())
select CONVERT(varchar(<b>8</b>),@Data,<b>101</b>)
select CONVERT(varchar(<b>12</b>),@Data,<b>101</b>)
а лучше вообще размер не указывать!
select CONVERT(varchar,@Data,<b>101</b>)


Krech79

длина никак не связана! попробуйте сами
declare @Data datetime
set @Data=(getdate())
select CONVERT(varchar(<b>8</b>),@Data,<b>101</b>)
select CONVERT(varchar(<b>12</b>),@Data,<b>101</b>)
а лучше вообще размер не указывать!
select CONVERT(varchar,@Data,<b>101</b>)
Да-да... вы правы... Особенно последний вариант понравился))) Он мне только одну букву A выдал))))P.S.К сведению SQL 2k, English


Krech79

Да-да... вы правы... Особенно последний вариант понравился))) Он мне только одну букву A выдал))))P.S.К сведению SQL 2k, English
Мой пример работает и на MSSQL 7.0и наMSSQL 2000и наMSSQL 2005


Krech79

declare @Data datetime
set @Data=(getdate())
select CONVERT(varchar(<b>8</b>),@Data,<b>101</b>) результат=<b>08</b>/<b>29</b>/<b>20</b>
select CONVERT(varchar(<b>12</b>),@Data,<b>101</b>) результат=<b>08</b>/<b>29</b>/<b>2006</b>
select CONVERT(varchar,@Data,<b>101</b>) результат=<b>08</b>/<b>29</b>/<b>2006</b>


Krech79

declare @Data datetime
set @Data=(getdate())
select CONVERT(varchar(<b>8</b>),@Data,<b>101</b>) результат=<b>08</b>/<b>29</b>/<b>20</b>
select CONVERT(varchar(<b>12</b>),@Data,<b>101</b>) результат=<b>08</b>/<b>29</b>/<b>2006</b>
select CONVERT(varchar,@Data,<b>101</b>) результат=<b>08</b>/<b>29</b>/<b>2006</b>
Ну по поводу 8 символов вы и сами видите как он работает... А без указания длинны на самом деле мне выдал "A", правда возможно из-за немного других манипуляций... хз... Тут скорее вопрос выбора... Я предпочитаю всетаки указывать, что хочу получить :)P.S.Спасибо за внимание. Думаю есть смысл прекратить нашу дискуссию... :)


Krech79

Господа, а почему Вы указываете 8 или 12 символов?! Ведь надо 10!!


Krech79

Господа, а почему Вы указываете 8 или 12 символов?! Ведь надо 10!!
Вопрос!!!Krech79:
Нужно дату преобразовать в строку в формате mm-dd-yyyy (либо dd-mm-yyyy)
Convert возвращает либо Aug <b>29</b> <b>2006</b> <b>12</b>:00AM, либо "The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value."
Помогите, как с ней побороться?
Вывод!!!Krech79:
CONVERT(varchar(<b>8</b>),@Data,<b>101</b>) - так было
CONVERT(varchar(<b>12</b>),@Data,<b>101</b>) - так получилось
неужели из-за длины??


Krech79

а 10 символов он пробовал?! Ведь в строке '20-05-2006' 10 символов, в не 8 и 12! Зачем писать больше или меньше?! Когда он ставил 8, то у него дата не влезала в строку!


Krech79

а 10 символов он пробовал?! Ведь в строке '20-05-2006' 10 символов, в не 8 и 12! Зачем писать больше или меньше?! Когда он ставил 8, то у него дата не влезала в строку!
Ты внимательно тему почитай... P.S.По моему пошел оффтоп!!!


Krech79

Когда он ставил 8, то у него дата не влезала в строку!
...resulted in an out-of-range datetime value - это не совсем "не влезалет" в строку... Скорее это дата выходящая из диапазона...


Krech79

а 10 символов он пробовал?! Ведь в строке '20-05-2006' 10 символов, в не 8 и 12! Зачем писать больше или меньше?! Когда он ставил 8, то у него дата не влезала в строку!
Вопрос был в другом! У него ошибка при переводе даты в строку, хотя в строку можно переводить всё что угодно и указывать хоть сколько символов ошибки не будет


Krech79

Ребята не спорьте, диагноз - пора в отпуск...Пытался повторить, все нормально, оказалось что просто @Data было типа datetime Всем спасибо, извините!!


Krech79

Ну вот опять...Не @Data, а параметр которому это все присваивалось...