ORACLE SQL Trim неэффективен с регулярными выражениями - PullRequest
0 голосов
/ 08 мая 2019

ПОЯСНЕНИЯ

Когда я упрощаю запрос , т.е.

   SELECT TO_CHAR(MIN(I.INCIDENTID))               AS "Incident ID",
          TRIM(TO_CHAR(I.CREATIONDATE,'DD-MON-YYYY'))           AS "Creation Date"    
   FROM   INCIDENT I  
   GROUP BY TRIM(TO_CHAR(I.CREATIONDATE,'DD-MON-YYYY'))

Я получаю

enter image description here

Но если я включу в свой фактический запрос более 164 000 отдельных строк, я получу

enter image description here

Но я ожидаю этого (единственное отличие - дата создания должна иметь правильный формат даты, а не эту сложную строку)

enter image description here

ОРИГИНАЛЬНЫЙ ВОПРОС

Я читаю дату и время из внешней базы данных Oracle и успешно обрезал все лишние пробелы с помощью TRIM(I.CREATIONDATE).

Я подтвердил это, потому что мой запрос SQL отображает только различные значения даты

Однако TRIM(I.CREATIONDATE) превращает 2/26/2019 11:05:44 AM в 26-FEB-19 11.05.43.925000 AM, но я хочу только 26-FEB-19

Когда я применяю регулярное выражение только для получения даты, то есть REGEXP_SUBSTR(TRIM(I.CREATIONDATE),'[^ ]+'), оно, безусловно, выводит 26-FEB-19, но каким-то образом добавляются дополнительные пробелы, потому что я получаю повторяющиеся даты.

Я пытался применить TRIM во второй раз, то есть TRIM(REGEXP_SUBSTR(TRIM(I.CREATIONDATE),'[^ ]+')), но я все еще получаю дубликаты

Затем я попытался сначала запустить регулярное выражение, а затем обрезать, но это не работает, то есть TRIM(REGEXP_SUBSTR(I.CREATIONDATE,'[^ ]+')) все еще дает дубликаты.

Пожалуйста, помогите

Ответы [ 2 ]

1 голос
/ 08 мая 2019

Попробуйте to_char:

trim(to_char(column_name,'dd-mon-yy'))
1 голос
/ 08 мая 2019

Я думаю, что вы хотите trunc(), а не trim(), чтобы удалить компонент времени.

Так что попробуйте:

trunc(i.creationdate)

Или, если вы хотите указать дни в определенном строковом представлении:

to_char(i.creationdate, 'YYYY-MM-DD')
...