JPA Критерии Выбрать с помощью Case и ARGUMENT 2 OF TO_CHAR НЕДОПУСТИМО Проблема - PullRequest
0 голосов
/ 06 февраля 2019

Мне нужно изменить этот SQL-запрос на JPA 2.1 Criteria Subquery

SELECT TABLE.DATE
+ (CASE WHEN DAYOFWEEK(TABLE.DATE) = 7 THEN 2   
         WHEN DAYOFWEEK(TABLE.DATE) = 6 THEN 3    
         ELSE 1 END) DAYS                                                         
  FROM TABLE
WHERE TABLE.PROC_ID = 'XXX'
   AND TABLE.CTRL_ID = '1'
WITH UR;

Я пробовал это:

nextBusinessDay.select(

           cb.<java.sql.Date>selectCase()
                .when(
                    cb.equal(cb.function("TO_CHAR", Integer.class, subqueryRoot.get(ProcessingInfo_.date), cb.literal("%w")), 7),
                   cb.function("TIMESTAMPADD", java.sql.Date.class, dayUnitInt, daysToAddWhenSaturday,cb.function("TIMESTAMP",java.sql.Timestamp.class,subqueryRoot.get(ProcessingInfo_.date)) )
                  //  cb.function("NEXT_DAY", java.sql.Date.class,subqueryRoot.get(ProcessingInfo_.date),monday)


                )
                .when(
                    cb.equal(cb.function("TO_CHAR", Integer.class, subqueryRoot.get(ProcessingInfo_.date), cb.literal("%w")), 6),
                    cb.function("TIMESTAMPADD", java.sql.Date.class, dayUnitInt, daysToAddWhenFriday, cb.function("TIMESTAMP",java.sql.Timestamp.class,subqueryRoot.get(ProcessingInfo_.date)))
                  //  cb.function("NEXT_DAY", java.sql.Date.class,subqueryRoot.get(ProcessingInfo_.date),monday)
                )
                .otherwise(
                    subqueryRoot.get(ProcessingInfo_.date)
                )
););

Но я получаю эту ошибку

Caused by: com.ibm.db2.jcc.am.SqlSyntaxErrorException: THE DATA TYPE, LENGTH, OR VALUE OF ARGUMENT 2 OF TO_CHAR IS INVALID. SQLCODE=-171, SQLSTATE=42815, DRIVER=4.15.82

Вы знаете, как это исправить?

...