#sql #oracle
#sql #Oracle
Вопрос:
У меня сложный select с большим количеством внутренних операторов case в case в case, чтобы попытаться определить правильную дату, но после того, как все выяснено, ему нужно использовать только первый день месяца.
Например, я мог бы получить 08/10/2018
, но я хочу, чтобы мой конечный результат был 08/01/2018
.
Возможно ли сделать что-то вроде приведенного ниже (очевидно, не работает, но ищу предложения).
SELECT TO_CHAR(sysdate,'MM/01/YYYY') FROM DUAL;
В этом случае sysdate будет заменен большим списком операторов case и вычислений. Единственный способ, который я вижу, это сделать
TO_CHAR(huge_calculations,'MM')||'01'||TO_CHAR(huge_calculations_again,'YYYY')
Ответ №1:
Вот несколько выражений, которые возвращают первый день месяца для заданной даты:
Просто:
SELECT TRUNC(sysdate, 'MM') FROM DUAL;
Или:
SELECT TRUNC(sysdate) - TO_NUMBER(TO_CHAR(sysdate,'DD')) 1 FROM dual
Или с помощью LAST_DAY
:
SELECT ADD_MONTHS((LAST_DAY(sysdate) 1),-1) FROM DUAL;
Комментарии:
1. Спасибо! Я только что нашел другую ссылку, которая использует trunc(sysdate, ‘MM’), которая также дает правильные результаты community.oracle.com/thread/1060750?start=0amp;tstart=0
2. @Slyvr: да, это, вероятно, самое простое из возможных решений, а также более эффективное…