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

Откуда:
Сообщений: 416
Как строку '19.10.2016 15:11:17' переконвертить в datetime ?
11 ноя 16, 13:20    [19882872]     Ответить | Цитировать Сообщить модератору
 Re: Как строку '19.10.2016 15:11:17' переконвертить в datetime  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37068
convert
11 ноя 16, 13:21    [19882877]     Ответить | Цитировать Сообщить модератору
 Re: Как строку '19.10.2016 15:11:17' переконвертить в datetime  [new]
stinggga
Member

Откуда:
Сообщений: 416
Гавриленко Сергей Алексеевич,

declare @TRANSACTIONDATETIME nvarchar(100) ='19.10.2016 15:11:17'
select convert(datetime,@TRANSACTIONDATETIME)
Валится
с ошибкой
11 ноя 16, 13:22    [19882883]     Ответить | Цитировать Сообщить модератору
 Re: Как строку '19.10.2016 15:11:17' переконвертить в datetime  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
stinggga,
в зависимости от языка...

SELECT CONVERT(Datetime,'19.10.2016 15:11:17',103)
11 ноя 16, 13:23    [19882886]     Ответить | Цитировать Сообщить модератору
 Re: Как строку '19.10.2016 15:11:17' переконвертить в datetime  [new]
stinggga
Member

Откуда:
Сообщений: 416
TaPaK,

Спасибо
11 ноя 16, 13:24    [19882897]     Ответить | Цитировать Сообщить модератору
 Re: Как строку '19.10.2016 15:11:17' переконвертить в datetime  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
stinggga,

PARSE(), независимо от языка.
11 ноя 16, 15:10    [19883589]     Ответить | Цитировать Сообщить модератору
 Re: Как строку '19.10.2016 15:11:17' переконвертить в datetime  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Владислав Колосов
stinggga,

PARSE(), независимо от языка.

ага, в зависимости от культуры :)
11 ноя 16, 15:14    [19883630]     Ответить | Цитировать Сообщить модератору
 Re: Как строку '19.10.2016 15:11:17' переконвертить в datetime  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 5975
TaPaK
SELECT CONVERT(Datetime,'19.10.2016 15:11:17',103)

Интересно, в букваре в соотв. разделе что-то недописали, что-то написали не так, или написали так хитро, что я не увидел нюанса? Стиль 103 - British/French формата dd/mm/yyyy, однако он вполне парсит формат dd.mm.yyyy, плюс еще на выходе дает временную компоненту. То же самое со стилем 104 (German, dd.mm.yyyy) и 105 (Italian, dd-mm-yyyy).
11 ноя 16, 15:18    [19883680]     Ответить | Цитировать Сообщить модератору
 Re: Как строку '19.10.2016 15:11:17' переконвертить в datetime  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Сон Веры Павловны,

я честно первый что вспомнил написал :)
11 ноя 16, 15:19    [19883690]     Ответить | Цитировать Сообщить модератору
 Re: Как строку '19.10.2016 15:11:17' переконвертить в datetime  [new]
o-o
Guest
Сон Веры Павловны
TaPaK
SELECT CONVERT(Datetime,'19.10.2016 15:11:17',103)

Интересно, в букваре в соотв. разделе что-то недописали, что-то написали не так, или написали так хитро, что я не увидел нюанса? Стиль 103 - British/French формата dd/mm/yyyy, однако он вполне парсит формат dd.mm.yyyy, плюс еще на выходе дает временную компоненту. То же самое со стилем 104 (German, dd.mm.yyyy) и 105 (Italian, dd-mm-yyyy).

я это вижу так:
конвертировать можно в обе стороны: строку в дату и дату в строку,
стили для этого одни и те же.
но для направления дата --> строка разделители важны,
ведь это то, что вы хотите видеть в строке на выходе,
поэтому будет видна разница в коде вида select convert(varchar(20), getdate(), style)
при style = 103, 104, 105, ...
при конвертации же из строки в дату разделитель неважен,
важно только знать, у нас сперва идет день, месяц или год.
поэтому код для обработки стилей 103, 104, 105 явно один и тот же,
он просто выгребает с позиций 1-2 день, 4-5 месяц, 7-10 год.

хотя разделители явно тоже проверяются на допустимость,
не катит код вида: select convert(date, '10*11+2016', 104)
11 ноя 16, 15:53    [19883920]     Ответить | Цитировать Сообщить модератору
 Re: Как строку '19.10.2016 15:11:17' переконвертить в datetime  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
o-o,

резонно проверить на ISDATE (внутри) перед парсом, дабы не оконфузиться.
11 ноя 16, 16:36    [19884136]     Ответить | Цитировать Сообщить модератору
 Re: Как строку '19.10.2016 15:11:17' переконвертить в datetime  [new]
o-o
Guest
Владислав Колосов,
я только предполагаю, как написан их код,
и почему он пропускает какие угодно валидные разделители даты
при конвертации из строки
11 ноя 16, 17:13    [19884277]     Ответить | Цитировать Сообщить модератору
 Re: Как строку '19.10.2016 15:11:17' переконвертить в datetime  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
Владислав Колосов
o-o,

резонно проверить на ISDATE (внутри) перед парсом, дабы не оконфузиться.
ISDATE() опирается на текущее значение @@DATEFORMAT,
так что всё равно можно оконфузиться. И это, может, лучше,
чем молча сконвертировать день в месяц, а месяц в день, и никогда не узнать об этом!

Что касается неподходящих, казалось бы, стилей CONVERT(),
то давно заметил, что CONVERT() всегда пытается сделать больше, чем обещает документация.
Если это возможно.
11 ноя 16, 18:13    [19884432]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить