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

Откуда:
Сообщений: 111
Как в Transact SQL преобразовать строку в дату?
16 фев 06, 12:48    [2362530]     Ответить | Цитировать Сообщить модератору
 Re: Как в Transact SQL преобразовать строку в дату?  [new]
Latuk
Member

Откуда: N 54°38', E 037°35'
Сообщений: 7313
CAST
CONVERT
FAQ
16 фев 06, 12:50    [2362539]     Ответить | Цитировать Сообщить модератору
 Re: Как в Transact SQL преобразовать строку в дату?  [new]
vooo
Member

Откуда:
Сообщений: 1316
FAQ
16 фев 06, 12:50    [2362544]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Как в Transact SQL преобразовать строку в дату?  [new]
LZeal
Guest
Как преобразовать строку в дату если формат в строке 104й (дд.мм.гггг) и защитися чтоб в строке случайно не бьіло кракозябр? IsDate не понимает формат дд.мм.гггг
14 сен 12, 22:13    [13167789]     Ответить | Цитировать Сообщить модератору
 Re: Как в Transact SQL преобразовать строку в дату?  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
http://msdn.microsoft.com/ru-ru/library/ms187347.aspx
Возвращаемое функцией ISDATE значение зависит от настроек, установленных инструкциями SET DATEFORMAT, SET LANGUAGE и параметром языка по умолчанию.
14 сен 12, 22:52    [13167934]     Ответить | Цитировать Сообщить модератору
 Re: Как в Transact SQL преобразовать строку в дату?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31780
LZeal
Как преобразовать строку в дату если формат в строке 104й (дд.мм.гггг)
CONVERT
LZeal
и защитися чтоб в строке случайно не бьіло кракозябр?
LIKE '[0-2][0-9].[0-1][0-9].[0-9][0-9][0-9][0-9]'

Или использовать IsDate, предварительно установив SET DATEFORMAT
14 сен 12, 22:53    [13167938]     Ответить | Цитировать Сообщить модератору
 Re: Как в Transact SQL преобразовать строку в дату?  [new]
Читатель неместный
Guest
select dateadd(day,dbo.val(left(dat,2) dbo.val(dateadd(month, dbo.val(substring(dat,4,2)), dateadd(year, dbo.val(substring(dat,7,4)-1900 , '19000101')))
гарантированно !!
только неработает без функции val ...в фоксе была такая
14 сен 12, 23:40    [13168098]     Ответить | Цитировать Сообщить модератору
 Re: Как в Transact SQL преобразовать строку в дату?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31780
Читатель неместный
гарантированно !!
только неработает без функции val ...в фоксе была такая
Даже в фоксе с функцией val не заработает. Вы наверное вопроса не прочли.
15 сен 12, 00:06    [13168182]     Ответить | Цитировать Сообщить модератору
 Re: Как в Transact SQL преобразовать строку в дату?  [new]
LZeal
Guest
alexeyvg
LIKE '[0-2][0-9].[0-1][0-9].[0-9][0-9][0-9][0-9]'



Єто мьісль! Но только вот кракозябр оно не пропустит, а 19.19.9999 пропустит... Но если после лайка сабстрингами поменять местами день и месяц (под понятньій для функции формат) и прогнать через IsDate то тогда должно сработать

Вот только как весь єтот мутантокод впихнуть в область WHERE из селекта ? )))
15 сен 12, 01:04    [13168281]     Ответить | Цитировать Сообщить модератору
 Re: Как в Transact SQL преобразовать строку в дату?  [new]
Читатель неместный
Guest
alexeyvg
Читатель неместный
гарантированно !!
только неработает без функции val ...в фоксе была такая
Даже в фоксе с функцией val не заработает. Вы наверное вопроса не прочли.
прочел "дд.мм.гггг строку в дату .... и защитися"
дата формируется сложением составляющих
и val имеется ввиду уже должна идти с защитой от крякозяблов - как в фоксе, возвращать численную часть строки слева
...ну там конешно ещё не хватает каких то скобок и зпятых.. но это мелочи))

Настаиваю )) такой способ восстановления даты из загруженных данных другого комплекса - самый дешевый и понятный!
15 сен 12, 10:16    [13168503]     Ответить | Цитировать Сообщить модератору
 Re: Как в Transact SQL преобразовать строку в дату?  [new]
step_ks
Member

Откуда:
Сообщений: 936
LZeal
alexeyvg
LIKE '[0-2][0-9].[0-1][0-9].[0-9][0-9][0-9][0-9]'



Єто мьісль! Но только вот кракозябр оно не пропустит, а 19.19.9999 пропустит... Но если после лайка сабстрингами поменять местами день и месяц (под понятньій для функции формат) и прогнать через IsDate то тогда должно сработать

Так поменяйте тогда уж сразу на 'yyyymmdd' и не надо лайков.
15 сен 12, 13:32    [13168817]     Ответить | Цитировать Сообщить модератору
 Re: Как в Transact SQL преобразовать строку в дату?  [new]
LZeal
Guest
step_ks,
Спасибо, сработало
15 сен 12, 14:16    [13168887]     Ответить | Цитировать Сообщить модератору
 Re: Как в Transact SQL преобразовать строку в дату?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31780
Читатель неместный
Настаиваю )) такой способ восстановления даты из загруженных данных другого комплекса - самый дешевый и понятный!
Самый самый дешевый и понятный способ - выполнить команду "преобразовать дату из формата дд.мм.гггг строку в дату"

Сравните варианты:
select dateadd(day,dbo.val(left(dat,2) dbo.val(dateadd(month, dbo.val(substring(dat,4,2)), dateadd(year, dbo.val(substring(dat,7,4)-1900 , '19000101')))

select convert(date, dat, 104)

Читатель неместный
прочел "дд.мм.гггг строку в дату .... и защитися"
...
и val имеется ввиду уже должна идти с защитой от крякозяблов
Так у ТС как раз проблема в защите от крякозяблов :-)
LZeal
alexeyvg
LIKE '[0-2][0-9].[0-1][0-9].[0-9][0-9][0-9][0-9]'


Єто мьісль! Но только вот кракозябр оно не пропустит, а 19.19.9999 пропустит...
Ну вам же не надо проверять на дату, вы спрашивали, как отделить крякозябры :-)
step_ks
Так поменяйте тогда уж сразу на 'yyyymmdd' и не надо лайков.
Если менять строку, то действительно, зачем лайки? И от настроек (языковых т и.п.) не будет зависеть.
15 сен 12, 19:13    [13169444]     Ответить | Цитировать Сообщить модератору
 Re: Как в Transact SQL преобразовать строку в дату?  [new]
Читатель неместный
Guest
alexeyvg
Читатель неместный
...и val имеется ввиду уже должна идти с защитой от крякозяблов
Так у ТС как раз проблема в защите от крякозяблов :-)
у меня то сама функция val с защитой от этих кракозяблов, то есть val('23@#$') вернет 23- числовой тип.
Гдето отсюда вроде скачивал...
15 сен 12, 19:27    [13169473]     Ответить | Цитировать Сообщить модератору
 Re: Как в Transact SQL преобразовать строку в дату?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31780
Читатель неместный
alexeyvg
пропущено...
Так у ТС как раз проблема в защите от крякозяблов :-)
у меня то сама функция val с защитой от этих кракозяблов, то есть val('23@#$') вернет 23- числовой тип.
Гдето отсюда вроде скачивал...
В данном случае это неприменимо - ведь вы используете её с вырезанием подстрок по формату даты.

То есть если у вас дата записана в виде '@&.09.2012', то что вернёт ваш запрос?
15 сен 12, 19:30    [13169480]     Ответить | Цитировать Сообщить модератору
 Re: Как в Transact SQL преобразовать строку в дату?  [new]
Читатель неместный
Guest
alexeyvg
...дата записана в виде '@&.09.2012', то что вернёт ваш запрос?
должна вернуть первое сентября
плохо конешно...ещё хуже что '2&.09.2012' вернет 2е сентября, лучше бы вернула 20е сентября.
Но с другой стороны, это же явный мусор - данные с такими датами - для этого случая сайдет и так
15 сен 12, 20:18    [13169589]     Ответить | Цитировать Сообщить модератору
 Re: Как в Transact SQL преобразовать строку в дату?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31780
Читатель неместный
должна вернуть первое сентября
плохо конешно...ещё хуже что '2&.09.2012' вернет 2е сентября, лучше бы вернула 20е сентября.
Но с другой стороны, это же явный мусор - данные с такими датами - для этого случая сайдет и так
Я и говорю, в том то и дело, что плохо. Нужно, что бы такие данные игнорировались и скидывались куда то отдельно, в какой то журнал некорректных строк. А у вас они просто преобразуются в случайные записи.
15 сен 12, 21:25    [13169786]     Ответить | Цитировать Сообщить модератору
 Re: Как в Transact SQL преобразовать строку в дату?  [new]
iap
Member

Откуда: Москва
Сообщений: 47047
alexeyvg
Читатель неместный
должна вернуть первое сентября
плохо конешно...ещё хуже что '2&.09.2012' вернет 2е сентября, лучше бы вернула 20е сентября.
Но с другой стороны, это же явный мусор - данные с такими датами - для этого случая сайдет и так
Я и говорю, в том то и дело, что плохо. Нужно, что бы такие данные игнорировались и скидывались куда то отдельно, в какой то журнал некорректных строк. А у вас они просто преобразуются в случайные записи.
Сойдёт! Никто не заметит!
15 сен 12, 21:56    [13169884]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить