В чем разница между двумя версиями?command sql oracle
Первые работы, вторая не работает.
1)
select sum(mont),to_char(datv,'MM')
from vente v
group by to_char(datv,'MM');
2)
select sum(mont),MONTH(datv)
from vente v
group by MONTH(datv);
В чем разница между двумя версиями?command sql oracle
Первые работы, вторая не работает.
1)
select sum(mont),to_char(datv,'MM')
from vente v
group by to_char(datv,'MM');
2)
select sum(mont),MONTH(datv)
from vente v
group by MONTH(datv);
Как я уже сказал в комментариях, МЕСЯЦ не является допустимой функция Oracle. Это не мешает вам самим определить это:
CREATE OR REPLACE FUNCTION MONTH (p_date IN DATE) return number
as
v_month number(2);
begin
SELECT TO_NUMBER(TO_CHAR(p_date,'MM')) INTO v_month FROM DUAL;
return v_month;
end;
/
Таким образом, ваш второй запрос должен работать сейчас.
Почему вы переопределяете существующую функцию? – tvCa
В Oracle нет функции MONTH. Для получения номера месяца вы должны использовать to_char (v_date, 'MM'). Тем не менее, он подходит для разработчиков, более используемых для синтаксиса SQL Server, где существует функция MONTH. – tilley31
OP говорит Oracle, нет необходимости менять Oracle в соответствии с MS, не так ли? Если «разработчики» не могут даже ввести правильное имя функции. – tvCa
В Oracle нет функции month()
. Если вы хотите месяц как числа, используйте extract()
select sum(mont), extract(month from datv)
from vente
group by extract(month from datv);
Для получения более подробной информации, пожалуйста, обратитесь к руководству:
https://docs.oracle.com/cd/E11882_01/server.112/e41084/functions002.htm#SQLRF20033
спасибо, что это работает – user3093583
МЕСЯЦ не является допустимым функции Oracle, если вы не определите сами. – tilley31
Вы абсолютно правы. Код, который я написал в ответе, работает, но он должен быть TO_NUMBER ... Я сделаю редактирование. – tilley31