2014-12-29 3 views
-1

В чем разница между двумя версиями?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); 
+3

МЕСЯЦ не является допустимым функции Oracle, если вы не определите сами. – tilley31

+0

Вы абсолютно правы. Код, который я написал в ответе, работает, но он должен быть TO_NUMBER ... Я сделаю редактирование. – tilley31

ответ

0

Как я уже сказал в комментариях, МЕСЯЦ не является допустимой функция 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; 
/

Таким образом, ваш второй запрос должен работать сейчас.

+0

Почему вы переопределяете существующую функцию? – tvCa

+0

В Oracle нет функции MONTH. Для получения номера месяца вы должны использовать to_char (v_date, 'MM'). Тем не менее, он подходит для разработчиков, более используемых для синтаксиса SQL Server, где существует функция MONTH. – tilley31

+0

OP говорит Oracle, нет необходимости менять Oracle в соответствии с MS, не так ли? Если «разработчики» не могут даже ввести правильное имя функции. – tvCa

0

В 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

+0

спасибо, что это работает – user3093583

Смежные вопросы