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

Откуда:
Сообщений: 43
Есть запрос вида:
with qq as(select '30.12.2015' from dual
union
select '30-12-2015' from dual
union
select '30.Feb.2015' from dual
union
select '21/мар/2015' from dual
union
select '12.30.15' from dual
union
select '256.2015' from dual)

нужно преобразовать к дате, делаю вот так:
with qq as(
select to_date('21.12.2015', 'dd.mm.yyyy') q from dual
union all
select to_date(translate('21-12-2015','#-', '.'),'dd.mm.yyyy' )q from dual
union all
select to_date(replace(regexp_replace('21.Feb.2015','(Feb){1,}', '02'), '.'), 'DDMMYYYY')d
from dual
union all
select to_date(replace(regexp_replace('21/мар/2015','(мар){1,}', '03'), '/'), 'DDMMYYYY') d
from dual
union all
select to_date('12.21.15', 'mm.dd.yy') q from dual
union all
select to_date('256.2015', 'ddd.yyyy') q from dual
)
select * from qq

как можно преобразовать обращаясь к дате обращаясь к самой таблице qq из первого запроса?
6 июл 16, 15:32    [19376009]     Ответить | Цитировать Сообщить модератору
 Re: преобразование строки к дате  [new]
dmdmdm
Member

Откуда: Нижний Новгород
Сообщений: 1640
Кто на ком стоял?
6 июл 16, 15:43    [19376103]     Ответить | Цитировать Сообщить модератору
 Re: преобразование строки к дате  [new]
wiiild_che
Member

Откуда:
Сообщений: 43
нужно из первого запроса получить дату
6 июл 16, 15:44    [19376113]     Ответить | Цитировать Сообщить модератору
 Re: преобразование строки к дате  [new]
dmdmdm
Member

Откуда: Нижний Новгород
Сообщений: 1640
Вы это делаете во втором запросе.

Еще раз - кто на ком стоял?
6 июл 16, 15:45    [19376121]     Ответить | Цитировать Сообщить модератору
 Re: преобразование строки к дате  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
wiiild_che,

(как понял) вы хотите подбирать формат для to_date из значения преобразуемой строки?
если так, то например case и флаг в руки
6 июл 16, 15:47    [19376138]     Ответить | Цитировать Сообщить модератору
 Re: преобразование строки к дате  [new]
wiiild_che
Member

Откуда:
Сообщений: 43
orawish,
да, но только не совсем понимаю как это сделать, в оракле новичок и поэтому сюда написал
6 июл 16, 15:50    [19376161]     Ответить | Цитировать Сообщить модератору
 Re: преобразование строки к дате  [new]
wiiild_che
Member

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

да, во втором я сделал внутри первого запроса, а вопрос именно в том, как сделать так же, в селекте обращаясь к таблице qq
6 июл 16, 15:52    [19376184]     Ответить | Цитировать Сообщить модератору
 Re: преобразование строки к дате  [new]
dmdmdm
Member

Откуда: Нижний Новгород
Сообщений: 1640
Кто дает такие задачи как "нарисовать черновик искусственного интеллекта", препод?
6 июл 16, 15:53    [19376195]     Ответить | Цитировать Сообщить модератору
 Re: преобразование строки к дате  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
wiiild_che
orawish,
да, но только не совсем понимаю как это сделать, в оракле новичок и поэтому сюда написал


примерно так
with qq as(select '30.12.2015' st from dual
     union select '31-12-15' from dual
)
select st
      ,case when regexp_substr (st,'^\d\d\.\d\d\.\d\d\d\d$') is not null then to_date (st,'dd.mm.yyyy') 
            when regexp_substr (st,'^\d\d\-\d\d\-\d\d$')     is not null then to_date (st,'dd-mm-rr') 
            end dt
  from qq;


разумеется, надо расширить (и углубить )
6 июл 16, 16:02    [19376261]     Ответить | Цитировать Сообщить модератору
 Re: преобразование строки к дате  [new]
wiiild_che
Member

Откуда:
Сообщений: 43
dmdmdm,лето же, если вопрос не по теме, то просьба не писать
6 июл 16, 16:02    [19376266]     Ответить | Цитировать Сообщить модератору
 Re: преобразование строки к дате  [new]
wiiild_che
Member

Откуда:
Сообщений: 43
orawish,
с Jan не меняется:(
6 июл 16, 16:14    [19376365]     Ответить | Цитировать Сообщить модератору
 Re: преобразование строки к дате  [new]
dmdmdm
Member

Откуда: Нижний Новгород
Сообщений: 1640
wiiild_che, у вас явно проблемы с русским языком или с мышлением (что неотделимо). Вас трудно понять.

Тему задаете вы. Мы тут не против что-то посоветовать, при четкой постановке задачи.

При нечеткой возникают вопросы: кто ставит такую задачу, кто ее неверно интерпретирует.

Коллега включил хрустальный шар и написал вам код. Помогло вам - значит, хрустальный шар сработал.
6 июл 16, 16:14    [19376367]     Ответить | Цитировать Сообщить модератору
 Re: преобразование строки к дате  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
wiiild_che,

Mon
6 июл 16, 16:16    [19376380]     Ответить | Цитировать Сообщить модератору
 Re: преобразование строки к дате  [new]
-2-
Member

Откуда:
Сообщений: 15330
orawish
разумеется, надо расширить (и углубить
пример неудачный. С одной стороны, оба значения покрываются одной маской. С другой - из трех пар цифр не всегда можно понять, что из них кто.
wiiild_che
если вопрос не по теме, то просьба не писать
писать просьбу сам к себе, чтобы не писать... это нечто.
6 июл 16, 16:18    [19376405]     Ответить | Цитировать Сообщить модератору
 Re: преобразование строки к дате  [new]
wiiild_che
Member

Откуда:
Сообщений: 43
dmdmdm,
ок, удачи
6 июл 16, 16:20    [19376423]     Ответить | Цитировать Сообщить модератору
 Re: преобразование строки к дате  [new]
ДержиДрук
Guest
with qq as(select '30.12.2015' dat from dual
           union
           select '30-12-2015' from dual
           union
           select '28.Feb.2015' from dual
           union
           select '21/ìàð/2015' from dual
           union
           select '12.30.15' from dual
           union
           select '256.2015' from dual)
SELECT dat, TO_DATE(dat, CASE WHEN REGEXP_INSTR(dat, '\d{2}\D\d{2}\D\d{4}')>0 THEN
                            'dd.mm.yyyy' 
                         ELSE    
                            CASE WHEN REGEXP_INSTR(UPPER(dat), '\d{2}\W[A-Z]{3}\W\d{4}')>0 THEN
                               'dd.mon.yyyy'                             
                            ELSE   
                               CASE WHEN REGEXP_INSTR(UPPER(dat), '\d{2}\W[À-ß]{3}\W\d{4}')>0 THEN
                                  'dd.mon.yyyy'
                               ELSE   
                                  CASE WHEN REGEXP_INSTR(dat, '\d{2}\W\d{2}\W\d{2}')>0 THEN
                                     'mm.dd.yy'
                                  ELSE   
                                     CASE WHEN REGEXP_INSTR(UPPER(dat), '\d{3}\W\d{4}')>0 THEN
                                        'ddd.yyyy' 
                                     END 
                                  END 
                               END                                                    
                            END                         
                         END, 
                         'NLS_DATE_LANGUAGE=' || CASE WHEN REGEXP_INSTR(UPPER(dat), '\d{2}\W[À-ß]{3}\W\d{4}')>0 THEN
                                                    'RUSSIAN'
                                                 ELSE
                                                    'AMERICAN'   
                                                 END) FROM qq
6 июл 16, 16:20    [19376426]     Ответить | Цитировать Сообщить модератору
 Re: преобразование строки к дате  [new]
wiiild_che
Member

Откуда:
Сообщений: 43
orawish,
значение пустое выдается
6 июл 16, 16:21    [19376429]     Ответить | Цитировать Сообщить модератору
 Re: преобразование строки к дате  [new]
Косяки
Guest
with qq as(select '30.12.2015' dat from dual
           union
           select '30-12-2015' from dual
           union
           select '28.Feb.2015' from dual
           union
           select '21/мар/2015' from dual
           union
           select '12.30.15' from dual
           union
           select '256.2015' from dual)
SELECT dat, TO_DATE(dat, CASE WHEN REGEXP_INSTR(dat, '\d{2}\D\d{2}\D\d{4}')>0 THEN
                            'dd.mm.yyyy' 
                         ELSE    
                            CASE WHEN REGEXP_INSTR(UPPER(dat), '\d{2}\W[A-Z]{3}\W\d{4}')>0 THEN
                               'dd.mon.yyyy'                             
                            ELSE   
                               CASE WHEN REGEXP_INSTR(UPPER(dat), '\d{2}\W[А-Я]{3}\W\d{4}')>0 THEN
                                  'dd.mon.yyyy'
                               ELSE   
                                  CASE WHEN REGEXP_INSTR(dat, '\d{2}\W\d{2}\W\d{2}')>0 THEN
                                     'mm.dd.yy'
                                  ELSE   
                                     CASE WHEN REGEXP_INSTR(UPPER(dat), '\d{3}\W\d{4}')>0 THEN
                                        'ddd.yyyy' 
                                     END 
                                  END 
                               END                                                    
                            END                         
                         END, 
                         'NLS_DATE_LANGUAGE=' || CASE WHEN REGEXP_INSTR(UPPER(dat), '\d{2}\W[А-Я]{3}\W\d{4}')>0 THEN
                                                    'RUSSIAN'
                                                 ELSE
                                                    'AMERICAN'   
                                                 END) FROM qq
6 июл 16, 16:22    [19376437]     Ответить | Цитировать Сообщить модератору
 Re: преобразование строки к дате  [new]
wiiild_che
Member

Откуда:
Сообщений: 43
Получилось
6 июл 16, 16:24    [19376460]     Ответить | Цитировать Сообщить модератору
 Re: преобразование строки к дате  [new]
wiiild_che
Member

Откуда:
Сообщений: 43
Всем спасибо, тему можно закрывать уже
6 июл 16, 16:24    [19376467]     Ответить | Цитировать Сообщить модератору
 Re: преобразование строки к дате  [new]
ДержиДрук
Guest
wiiild_che
Всем спасибо, тему можно закрывать уже

Наивный )
6 июл 16, 16:26    [19376476]     Ответить | Цитировать Сообщить модератору
 Re: преобразование строки к дате  [new]
wiiild_che
Member

Откуда:
Сообщений: 43
ДержиДрук, вы очень помогли, спасибо :)
6 июл 16, 16:29    [19376487]     Ответить | Цитировать Сообщить модератору
 Re: преобразование строки к дате  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54385
wiiild_che
ДержиДрук, вы очень помогли, спасибо :)
12.11.15 - это 12 ноябрь или 11 декабрь?
7 июл 16, 14:09    [19380878]     Ответить | Цитировать Сообщить модератору
 Re: преобразование строки к дате  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10051
andreymx
wiiild_che
ДержиДрук, вы очень помогли, спасибо :)
12.11.15 - это 12 ноябрь или 11 декабрь?


Это 15 ноября 12ого года .

SY.
7 июл 16, 17:14    [19382243]     Ответить | Цитировать Сообщить модератору
 Re: преобразование строки к дате  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 2170
wiiild_che,

надо бороться не с системой в поисках лайфхака-костыля, а с кривыми данными (очевидно, приходящими извне).
(лечить не симптомы, а причину)
7 июл 16, 18:00    [19382461]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить