«ORA-00936: пропущенное выражение» в DATE - PullRequest
0 голосов
/ 29 января 2020

на работе мы переносим работу с DB2 for iSeries SQL на Oracle SQL и испытываем некоторые трудности. Я все еще считаю себя новичком с SQL и не могу понять, что Oracle SQL не нравится в этом предложении.

  CASE 
        WHEN YYCOL IS NULL THEN NULL 
        ELSE max ( DATE ( MMCOL || '/' || DDCOL || '/' || YYCOL ) ) 
  END AS COLUMN007 

При запросе с помощью указанного выше условия:

ORA-00936: missing expression
            ELSE max ( DATE ( MMCOL || '/' || DDCOL || '/' || YYCOL ) ) 
                       ^

Если это возможно, есть ли какая-нибудь простая в использовании документация для перехода с DB2 для iSeries SQL на Oracle SQL? Любая помощь приветствуется!

Ответы [ 2 ]

0 голосов
/ 29 января 2020

", поэтому он показывает только метку даты". To_date преобразует предоставленную строку в oracle внутренний двоичный тип данных DATE, который также всегда включает время до секунды. Но чтобы «показать» дату, этот тип DATE должен быть преобразован обратно в строку символов. Обычно это делается с помощью TO_CHAR, предоставляя DATE и «маску формата». Поскольку вы этого не предоставили, oracle был вынужден сделать это неявно и использовать эффективное значение NLS_DATE_FORMAT. Если вы хотите, чтобы он только «показывал» дату, тогда

to_char(to_date(MMCOL||'/'||DDCOL||'/'||yycol,'mm/dd/yy'),'mm/dd/yyyy')

Я рекомендую вам go к официальным oracle документам и искать функции to_date и to_char. См. Также статью, которую я написал для этого, в https://edstevensdba.wordpress.com/2011/04/07/nls_date_format/

В качестве отступления, пожалуйста, прекратите использовать 2-ди git года. 20 лет go Я и тысячи таких же парней, как и я, разорвали наши окурки, чтобы не допустить обвала 1 января 2000 года. И только на прошлой неделе я прочитал статью, что системы, которые пинали баллончик вниз по дороге с «датой поворота» теперь подходит к горе, как 1-Jan-2020. Пожалуйста, прекратите повторять те же ошибки, которые мы должны были исправить 20 лет go.

0 голосов
/ 29 января 2020

Вы должны использовать -

CASE 
        WHEN YYCOL IS NULL THEN NULL 
        ELSE max ( TO_DATE ( MMCOL || '/' || DDCOL || '/' || YYCOL, 'MM/DD/YY' ) ) 
  END AS COLUMN007 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...