Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Конвертация строки типа '18 июля 2016 г. 23:55' в datetime  [new]
erop
Member

Откуда: Москва
Сообщений: 5
Нет ли идей каких-нибудь как легко и просто (то есть встроенными средствами) сконвертировать строку типа "18 июля 2016 г. 23:55" в datetime? Ни cast, ни convert не конвертят ни строку в оригинальном виде, ни ее же после вырезания 'г. '. Data conversion task из SSIS тоже фейлит конвертацию. Понятно, что можно чего-то кастомного придумать для такой конверсии в рамках Database Engine или SSIS. Хочется узнать, может кто сталкивался с подобной проблемой.
25 июл 16, 14:22    [19451451]     Ответить | Цитировать Сообщить модератору
 Re: Конвертация строки типа '18 июля 2016 г. 23:55' в datetime  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
все кто сталкивался уже давно хранят\принимают\обрабатывают дату исключительно в формате датавремя
А так в ФАКЕ есть статья с примерами подобный извращений
25 июл 16, 14:26    [19451483]     Ответить | Цитировать Сообщить модератору
 Re: Конвертация строки типа '18 июля 2016 г. 23:55' в datetime  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
erop,

вот так работает:
SET LANGUAGE русский;

SELECT CAST('18 июл 2016 23:55' AS DATETIME);
То есть надо как-то оставить от месяца первые 3 буквы.
И "г." убрать. Совсем.
25 июл 16, 14:31    [19451518]     Ответить | Цитировать Сообщить модератору
 Re: Конвертация строки типа '18 июля 2016 г. 23:55' в datetime  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
iap
erop,

вот так работает:
SET LANGUAGE русский;

SELECT CAST('18 июл 2016 23:55' AS DATETIME);

То есть надо как-то оставить от месяца первые 3 буквы.
И "г." убрать. Совсем.
Вообще, это 113-й формат CONVERTа
25 июл 16, 14:35    [19451554]     Ответить | Цитировать Сообщить модератору
 Re: Конвертация строки типа '18 июля 2016 г. 23:55' в datetime  [new]
erop
Member

Откуда: Москва
Сообщений: 5
iap
iap
erop,

вот так работает:
SET LANGUAGE русский;

SELECT CAST('18 июл 2016 23:55' AS DATETIME);


То есть надо как-то оставить от месяца первые 3 буквы.
И "г." убрать. Совсем.
Вообще, это 113-й формат CONVERTа


Всем спасибо за ответы!

Дико извиняюсь, может у меня чего сломано на моем SQL Srv 2016 Dev, но и
SET LANGUAGE русский;
SELECT CAST('18 июл 2016 23:55' AS DATETIME);

и

SELECT CONVERT(DATETIME, '18 июл 2016 23:55', 113);

возвращают
автор
Msg 241, Level 16, State 1, Line 11
Ошибка преобразования даты или времени из символьной строки.


Если честно, то я склонился в сторону Script Component из SSIS. Ибо безо всяких отрезаний и вырезаний получается вот так:

> string MyDateString = "18 июля 2016 г. 23:55";
> IFormatProvider culture = new System.Globalization.CultureInfo("ru-RU", true);
> var MyDate = DateTime.Parse(MyDateString, culture);
> Console.WriteLine(MyDate);
2016-07-18 23:55:00
25 июл 16, 16:13    [19452439]     Ответить | Цитировать Сообщить модератору
 Re: Конвертация строки типа '18 июля 2016 г. 23:55' в datetime  [new]
o-o
Guest
потому что у вас в базе некириллический коллэйшен.
передавайте юникод
SET LANGUAGE русский;
SELECT CAST(N'18 июл 2016 23:55' AS DATETIME);
SELECT CONVERT(DATETIME, N'18 июл 2016 23:55', 113);
25 июл 16, 16:27    [19452577]     Ответить | Цитировать Сообщить модератору
 Re: Конвертация строки типа '18 июля 2016 г. 23:55' в datetime  [new]
erop
Member

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

Красота! Спасибо!
25 июл 16, 16:41    [19452660]     Ответить | Цитировать Сообщить модератору
 Re: Конвертация строки типа '18 июля 2016 г. 23:55' в datetime  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4537
erop, c 2012го
select try_parse(N'18 июля 2016 г. 23:55' as datetime using 'ru-RU')
25 июл 16, 16:46    [19452705]     Ответить | Цитировать Сообщить модератору
 Re: Конвертация строки типа '18 июля 2016 г. 23:55' в datetime  [new]
erop
Member

Откуда: Москва
Сообщений: 5
buser,

И даже вот так работает:
SELECT TRY_PARSE(N'18 июля 2016 г. 23:55 +03:00' AS DATETIMEOFFSET USING 'ru-RU');

Шайтанама!

Спасибо!
25 июл 16, 16:57    [19452777]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить