преобразовать оператор split to_char из Oracle в SQL Server в Java - PullRequest
0 голосов
/ 16 ноября 2018

В моем Java-коде есть несколько операторов Oracle SQL, которые часто разбиты на отдельные части, что затрудняет поиск эквивалентного оператора в SQL Server 2017. Вот пример:

if (typeId >= 1 && typeId <= 5)
        {
            sql =   "SELECT t.run_id, t.tran_id, t.tran_id sort_id, t.tran_type, t.prod_id, t.type_id, t.value, " +
                     getExtractStatement() + " (year from t.tran_datetime) y, " +
                     getExtractStatement() + " (month from t.tran_datetime) mo, " +
                     getExtractStatement() + " (day from t.tran_datetime) d, " +
                     " to_number(to_char (t.tran_datetime, 'HH24')) h, " +
                     " to_number(to_char (t.tran_datetime, 'MI')) mi, " +
                     " to_number(to_char (t.tran_datetime, 'SS')) s, " +
                     " to_number(to_char (t.tran_datetime, 'FF')) ms " +
                     " FROM tran_calc_group t, mai_group_log m " +
                     " WHERE t.run_id = m.run_id and m.group_id = 1 " +
                     " AND m.mai_class_id = %d " +
                     " AND t.result_group_id = m.level_1 " +
                     " AND t.result_group_id_2 = m.level_2 " +
                     " AND t.result_group_id_3 = m.level_3 " +
                     " AND t.result_group_id_4 = m.level_4 " +
                     " AND t.prod_id = " + query.getProdId() + 
                     " AND t.run_id IN (" + runLogIds + ")" +
                     " AND t.type_id = " + typeId;
        }

Если бы это был только обычный оператор to_char с аргументом YYYY-MM-DD, например, я мог бы просто использовать GETDATE(), 20 в SQL Server, но я не знаю, как это сделать для такого оператора разбиения

" to_number(to_char (t.tran_datetime, 'HH24')) h, " +
" to_number(to_char (t.tran_datetime, 'MI')) mi, " +
" to_number(to_char (t.tran_datetime, 'SS')) s, " +
" to_number(to_char (t.tran_datetime, 'FF')) ms " +

Я пытался преобразовать его с помощью инструмента (SQLines), но он не работал.

1 Ответ

0 голосов
/ 16 ноября 2018

Вы можете проверить функцию DATEPART в SQL Server.Это позволяет вам извлекать определенные части данной даты и времени.Например:

SELECT GETUTCDATE()
      ,DATEPART(HOUR, GETUTCDATE())
      ,DATEPART(MINUTE, GETUTCDATE())
      ,DATEPART(SECOND, GETUTCDATE())
      ,DATEPART(MILLISECOND, GETUTCDATE());

enter image description here

Кроме того, как указано в документации, он возвращает целое число, поэтому нет необходимости в дополнительном преобразовании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...