Oracle sql форматы запроса даты однозначные - PullRequest
2 голосов
/ 26 февраля 2020

Мне нужно получить даты из Oracle как Java SimpleDateFormat M / D / YYYY (например, Дата независимости будет 7/4/1776). Однако, глядя на https://docs.oracle.com/cd/B28359_01/olap.111/b28126/dml_commands_1029.htm#OLADM780, кажется, есть только способ получить MM / dd / yyyy (07/04/1776).

Существуют ли какие-либо приемы для получения даты оригинальный способ? Я полагаю, я мог бы поиграть со всеми видами операторов if и подстрок, но это кажется довольно сложным.

То есть

 select to_char(sysdate, 'MM/DD/YYYY') from dual    works

, но

 select to_char(sysdate, 'M/D/YYYY') from dual    does not.

Ответы [ 2 ]

5 голосов
/ 26 февраля 2020

Для этого можно использовать модификатор формата fm:

select to_char(sysdate, 'fmMM/DD/YYYY') formated_date from dual

Демонстрация на DB Fiddle :

 select to_char(date '1776-07-04', 'fmMM/DD/YYYY') formated_date from dual
| FORMATED_DATE |
| :------------ |
| 7/4/1776      |
0 голосов
/ 26 февраля 2020

Регулярные выражения - ваш друг здесь:

WITH cteDate AS (SELECT TO_DATE('01/02/2020', 'DD/MM/YYYY') AS SOME_DATE FROM DUAL)
SELECT TO_CHAR(SOME_DATE, 'MM/DD/YYYY') AS FORMATTED_SOME_DATE,
       REGEXP_REPLACE(TO_CHAR(SOME_DATE, 'MM/DD/YYYY'), '0([0-9])/', '\1/') AS FIXED_DATE
  FROM cteDate

Вышеприведенное возвращает

FORMATTED_SOME_DATE    FIXED_DATE
02/01/2020             2/1/2020

Чтобы объяснить, что здесь происходит: поисковое выражение '0([0-9])/' говорит: «Ищите подстроку» который начинается с символа «0», сопровождается одним символом в диапазоне от «0» до «9» и заканчивается символом «/». Считайте символ в диапазоне от «0» до «9» как group '.

Выражение замены '\1/' говорит: «Замените то, что вы нашли в строке поиска, первым сгруппированным выражением (есть только одно), за которым следует символ sla sh».

...