Форматы даты в sql

((SELECT ES.MCH_POS
           FROM IFSAPP.EQUIPMENT_SERIAL ES
          WHERE ES.CONTRACT = W.CONTRACT
            AND ES.MCH_CODE = W.MCH_CODE), 'yyyy/mm/dd') as SALE_DATE

Когда я запускаю этот код, возникает ошибка как ORA-00907: missing right parenthesis

это только часть Заявления или всего Заявления?

Jens 10.09.2018 08:35

@Chamara: это похоже на часть более крупного оператора SQL. Пожалуйста, опубликуйте весь код SQL для более точной диагностики!

nitinr708 10.09.2018 08:41

Это часть Заявления.

Chamara Lakmal Weerasinghe 10.09.2018 09:26

Так что покажите все заявление. Часть, которую вы показываете, похоже, находится в предложении select, и если ей предшествует TO_CHAR или TO_DATE, синтаксически в этом нет ничего плохого. Не увидев всего заявления, мы не сможем вам помочь. Разве Oracle не сообщает вам, в какой строке оператора возникает ошибка?

Thorsten Kettner 10.09.2018 09:34

SQL слишком длинный. Ошибка отображается в четвертой строке. Через запятую.

Chamara Lakmal Weerasinghe 10.09.2018 10:39
1
5
53
2

Ответы 2

ORA-00907: missing right parenthesis

Это синтаксическая ошибка. Иногда это действительно означает, что у нас есть непарная левая скобка. Чаще всего это означает, что мы сделали блумер и у нас есть ключевое слово или выражение, в которых компилятор ожидал закрывающего ). Иногда это просто указывает на опечатку.

, 'yyyy/mm/dd' - это маска формата, используемая при преобразовании строки в дату или даты в строку. Однако в вашем фрагменте нет функции TO_DATE () или TO_CHAR (), поэтому я предполагаю, что это ваша проблема. У вас есть маска формата, в которой, по мнению компилятора, должен быть только ).

С помощью простого подзапроса трудно быть уверенным, но, вероятно, вам нужно что-то вроде этого:

(SELECT to_char(ES.MCH_POS, 'yyyy/mm/dd') as SALE_DATE
       FROM IFSAPP.EQUIPMENT_SERIAL ES
      WHERE ES.CONTRACT = W.CONTRACT
        AND ES.MCH_CODE = W.MCH_CODE)

Если это не то решение, которое вам нужно, и оно не помогает вам найти его, пожалуйста, отредактируйте свой вопрос, чтобы включить более подробную информацию о проблеме, которую вы пытаетесь решить.

В Oracle вам нужна функция to_char()

TO_CHAR(date-value,'date-format-mask')

Из вашего фрагмента кода он должен выглядеть больше примерно в этих строках 9, я думаю):

select ....
, to_char((SELECT ES.MCH_POS
           FROM IFSAPP.EQUIPMENT_SERIAL ES
          WHERE ES.CONTRACT = W.CONTRACT
            AND ES.MCH_CODE = W.MCH_CODE
            AND rownum = 1), 'yyyy/mm/dd') as SALE_DATE

т.е. коррелированный подзапрос возвращает одно значение даты, и это значение даты затем форматируется как гггг / мм / дд

nb: Я добавил and rownum = 1, потому что, как вы видите выше, этот коррелированный подзапрос ДОЛЖЕН возвращать только одно значение даты.

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