Подстрока из значения в оракуле sql - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть это значение:

Thu Jan 01 01:00:00 UZT 1970

Мне нужно это значение из вышеуказанного значения:

Thu Jan 1970

Нужна подстрока изэто значение.

Ответы [ 2 ]

1 голос
/ 04 апреля 2019

Используйте TO_DATE, затем TO_CHAR:

SELECT TO_CHAR(
         TO_DATE(
           'Thu Jan 01 01:00:00 UZT 1970',
           'Dy Mon DD HH24:MI:SS "UZT" YYYY'
         ),
         'Dy Mon YYYY'
       ) AS substring
FROM   DUAL
| SUBSTRING    |
| :----------- |
| Thu Jan 1970 |

db <> fiddle здесь

Если вы хотитекак формат DD-MM-YYYY, затем измените модель формата, используемую в TO_CHAR на 'DD-MM-YYYY', но если вы собираетесь хранить ее в базе данных, было бы лучше просто сохранить ее как значение даты, а не как отформатированную строку.


У меня есть несколько столбцов "UZT" и несколько "UZST", тогда я получаю сообщение об ошибке "UZST"

Если это единственные часовые пояса, и выНе беспокойтесь, если между двумя зонами будет разница в часах, вы можете использовать:

SELECT TO_CHAR(
         TO_DATE(
           REPLACE( your_column, 'UZST', 'UZT' ),
           'Dy Mon DD HH24:MI:SS "UZT" YYYY'
         ),
         'Dy Mon YYYY'
       ) AS substring
FROM   your_table

или если вам необходимо учесть часовые пояса (замените значения часовых поясов соответствующим образом):

SELECT TO_CHAR(
         TO_TIMESTAMP_TZ(
           REPLACE(
             REPLACE(
               your_column,
               'UZST',
               '+05:00'
             ),
             'UZT',
             '+05:00'
           ),
           'Dy Mon DD HH24:MI:SS TZH:TZM YYYY'
         ) AT TIME ZONE '+05:00',
         'Dy Mon YYYY'
       ) AS substring
FROM   your_table
1 голос
/ 04 апреля 2019

Похоже на строку .Если это так, вот один (на самом деле, два ) вариант:

SQL> with test (col) as
  2    (select 'Thu Jan 01 01:00:00 UZT 1970' from dual)
  3  select substr(col, 1, instr(col, ' ', 1, 2)) || substr(col, -4) result,
  4         regexp_substr(col, '(\w+ ){2}') || regexp_substr(col, '\d+$') result2
  5  from test;

RESULT       RESULT2
------------ ------------
Thu Jan 1970 Thu Jan 1970

SQL>

[РЕДАКТИРОВАТЬ]

Как преобразовать его в другойформат?Применяя TO_DATE (для преобразования «Чт января 1970», который является строкой, в допустимый формат DATE), а затем TO_CHAR с соответствующей маской формата, чтобы получить то, что вы хотите.

SQL> with test (col) as
  2    (select 'Thu Jan 01 01:00:00 UZT 1970' from dual),
  3  inter as
  4    (select substr(col, 1, instr(col, ' ', 1, 2)) || substr(col, -4) result,
  5            regexp_substr(col, '(\w+ ){2}') || regexp_substr(col, '\d+$') result2
  6     from test
  7    )
  8  select to_char(to_date(result, 'dy mon yyyy', 'nls_date_language = english'), 'dd-mm-yyyy') new_result
  9  from inter;

NEW_RESULT
----------
01-01-1970

SQL>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...