Подстрока из значения в оракуле sql

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

Thu Jan 01 01:00:00 UZT 1970

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

Thu Jan 1970

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

Какого типа хранится это значение?

Mureinik 04.04.2019 08:46

Что ты уже испробовал

Jens 04.04.2019 08:48

Надеюсь, вы не храните это значение в столбце varchar — это должно быть date или timsetamp. И тогда переформатирование дисплея становится таким же простым, как применение to_char() к столбцу при его выборе.

a_horse_with_no_name 04.04.2019 09:10
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
3
62
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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», в допустимый формат ДАТЫ), а затем 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>

Как изменить на «ДД-ММ-ГГГГ»

Ramiz Tariq 04.04.2019 09:01

Пожалуйста. Я изменил свой ответ, посмотрите, пожалуйста.

Littlefoot 04.04.2019 09:08

Пробую в SQL Plus работает нормально. Но когда я пытаюсь в Oracle Forms Text Field Item Date Column Data Type «CHAR», то получаю сообщение об ошибке, когда возникает ошибка триггера нажатия кнопки. Вы можете увидеть код по этой ссылке stackoverflow.com/questions/55487932/…

Ramiz Tariq 04.04.2019 11:00
Ответ принят как подходящий

Используйте 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 |

дб <> рабочий пример здесь

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


I have some columns "UZT" and some "UZST" then getting error on "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

Спасибо за Ваш ответ. У меня есть несколько столбцов «УЗТ» и несколько «УЗСТ», затем появляется ошибка «УЗСТ».

Ramiz Tariq 05.04.2019 08:51

Другие вопросы по теме