powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как превратить такое "22 января в 15:30" в дату?
17 сообщений из 17, страница 1 из 1
Как превратить такое "22 января в 15:30" в дату?
    #39435290
stil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как превратить такое "22 января в 15:30" в дату? Возможно ли это какой то хитрой маской в to_char? Или регулярку в руку и вперед?
v11.2.0.3
...
Рейтинг: 0 / 0
Как превратить такое "22 января в 15:30" в дату?
    #39435295
stil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stil,
получилось это НЕЧТО ))
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
with t as(select '22 января в 15:30' dt from dual)
select dt, 
         to_date(
         regexp_substr(dt,'[^ ]+',1,1) ||
         decode(regexp_substr(dt,'[^ ]+',1,2),'января','01',
                                                            'февраля','02',
                                                            'марта','03',
                                                            'апреля','04') ||'2017 '||
         regexp_substr(dt,'[^ ]+',1,4),'DDMMYYYY HH24:Mi') dt2
from t



P.S. Прошу сильно яйцами не кидаться - это разовый инструмент и сильно думать не хотелось
...
Рейтинг: 0 / 0
Как превратить такое "22 января в 15:30" в дату?
    #39435304
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stil,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SQL> alter session set nls_date_format = 'YYYY:MM:DD HH24.MI';

Session altered.

SQL> select to_date('22 январь в 15:30',
  2                 'dd month "в "hh24:mi',
  3                 'NLS_DATE_LANGUAGE = Russian') dt
  4    from dual;

DT
----------------
2017:01:22 15.30

Про родительный падеж ищи на форуме.
Лечиться реплейсом.
...
Рейтинг: 0 / 0
Как превратить такое "22 января в 15:30" в дату?
    #39435337
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopstil,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SQL> alter session set nls_date_format = 'YYYY:MM:DD HH24.MI';

Session altered.

SQL> select to_date('22 январь в 15:30',
  2                 'dd month "в "hh24:mi',
  3                 'NLS_DATE_LANGUAGE = Russian') dt
  4    from dual;

DT
----------------
2017:01:22 15.30

Про родительный падеж ищи на форуме.
Лечиться реплейсом.
Можно название месяца усекать до трех букв и использовать шаблон 'mon'.
Тогда REPACE не потребуется.
...
Рейтинг: 0 / 0
Как превратить такое "22 января в 15:30" в дату?
    #39435338
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plus,

1 мая
...
Рейтинг: 0 / 0
Как превратить такое "22 января в 15:30" в дату?
    #39435365
stil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshop,

ну вот скорее и был вопрос о родительном падеже..

ну и про выделение " в" в кавычки в шаблоне to_date я не знал
...
Рейтинг: 0 / 0
Как превратить такое "22 января в 15:30" в дату?
    #39435366
stil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plus,

чтоб усечь месяц надо выделить месяц. Соответственно опять приходим к регулярке
...
Рейтинг: 0 / 0
Как превратить такое "22 января в 15:30" в дату?
    #39435389
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stilSQL*Plus,

чтоб усечь месяц надо выделить месяц.
Соответственно опять приходим к регулярке
Зачем?
Берем три символа после первого пробела
Код: plaintext
SUBSTR(field_name, INSTR(field_name, ' ')+1, 3)
...
Рейтинг: 0 / 0
Как превратить такое "22 января в 15:30" в дату?
    #39435430
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*PlusstilSQL*Plus,
чтоб усечь месяц надо выделить месяц.
Соответственно опять приходим к регуляркеЗачем?
Берем три символа после первого пробела
Код: plaintext
SUBSTR(field_name, INSTR(field_name, ' ')+1, 3)
Код должен быть легкочитаемо сопровождаемым. И сопровождать его будут явно не старые ассемблерные пердуны. Так почему бояться удобных регулярок?
...
Рейтинг: 0 / 0
Как превратить такое "22 января в 15:30" в дату?
    #39435445
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stildbms_photoshop,

ну вот скорее и был вопрос о родительном падеже..

ну и про выделение " в" в кавычки в шаблоне to_date я не знал
Код: plsql
1.
2.
select to_date(dt, 'dd month "в "hh24:mi', 'NLS_DATE_LANGUAGE = Russian') dt
  from (select replace(replace(replace(dt, 'мая', 'май'), 'я ', 'ь '), 'а ', ' ') dt from t)
...
Рейтинг: 0 / 0
Как превратить такое "22 января в 15:30" в дату?
    #39435515
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicSQL*Plusпропущено...
Зачем?
Берем три символа после первого пробела
Код: plaintext
SUBSTR(field_name, INSTR(field_name, ' ')+1, 3)
Код должен быть легкочитаемо сопровождаемым.
И сопровождать его будут явно не старые ассемблерные пердуны.
Так почему бояться удобных регулярок?Покажите каким будет легкочитаемо-сопровождаемый код с регулярками.
Посмотрим на него, оценим, обсудим.
...
Рейтинг: 0 / 0
Как превратить такое "22 января в 15:30" в дату?
    #39435558
Фотография JaRo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopSQL*Plus,

1 маяГы
Код: plsql
1.
2.
3.
4.
select to_date(str,
                  '..mon..' default '..05..' on conversion error,
                  'NLS_DATE_LANGUAGE = Russian') dt
     from (select 'янв' str from dual union all select 'мая' str from dual)

на 12.2
...
Рейтинг: 0 / 0
Как превратить такое "22 января в 15:30" в дату?
    #39435731
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaRodbms_photoshopSQL*Plus,

1 маяГы
Код: plsql
1.
2.
3.
4.
select to_date(str,
                  '..mon..' default '..05..' on conversion error,
                  'NLS_DATE_LANGUAGE = Russian') dt
     from (select 'янв' str from dual union all select 'мая' str from dual)

на 12.2
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> select to_date(str,
  2  		       '..mon..' default '..05..' on conversion error,
  3  		       'NLS_DATE_LANGUAGE = Russian') dt
  4  	  from (select 'янв' str from dual union all select 'мая' str from dual);
                  '..mon..' default '..05..' on conversion error,
                            *
ERROR at line 2:
ORA-00907: missing right parenthesis 

SQL> select to_date(str default 'май' on conversion error,
  2  		       '..mon..',
  3  		       'NLS_DATE_LANGUAGE = Russian') dt
  4  from (select 'янв' str from dual union all select 'мая' str from dual);

DT                                                                              
---------                                                                       
01-JAN-17                                                                       
01-MAY-17 
...
Рейтинг: 0 / 0
Как превратить такое "22 января в 15:30" в дату?
    #39435752
Фотография JaRo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plus,
да, спс, писалось на память, без базы (
PS: но фишка (а также функция conversion_error) очень полезные (само собой речь не про этот пример :) ) - часто возникала мысль "Ну что Ораклу стоит такое сделать".
...
Рейтинг: 0 / 0
Как превратить такое "22 января в 15:30" в дату?
    #39435767
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если так?


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
select to_date(str default 'май' on conversion error,
       '..mon..',
       'NLS_DATE_LANGUAGE = Russian') dt
  from (
       select 'янв' str from dual union all
       select 'мая' str from dual union all
       select 'Вася Петя' str from dual
       );
...
Рейтинг: 0 / 0
Как превратить такое "22 января в 15:30" в дату?
    #39435805
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxа если так?


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
select to_date(str default 'май' on conversion error,
       '..mon..',
       'NLS_DATE_LANGUAGE = Russian') dt
  from (
       select 'янв' str from dual union all
       select 'мая' str from dual union all
       select 'Вася Петя' str from dual
       );

Выполнял через SQL Developer Version 4.1.5.21
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SQL> set echo on
SQL> select to_date(str default 'май' on conversion error,
       '..mon..',
       'NLS_DATE_LANGUAGE = Russian') dt
  from (
       select 'янв' str from dual union all
       select 'мая' str from dual union all
       select 'Вася Петя' str from dual
       );

DT       
----------
01.01.2017
01.05.2017
01.05.2017
...
Рейтинг: 0 / 0
Как превратить такое "22 января в 15:30" в дату?
    #39435907
Фотография JaRo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx
Код: plsql
1.
       select 'Вася Петя' str from dual

Ибо нефиг ) Это шутка была.

JaRoа также функция conversion_errorVALIDATE_CONVERSION в смысле
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как превратить такое "22 января в 15:30" в дату?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]