【问题标题】:convert split to_char statement from Oracle to SQL Server in Java将拆分 to_char 语句从 Oracle 转换为 Java 中的 SQL Server
【发布时间】:2019-04-19 11:59:02
【问题描述】:

我的 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;
        }

如果它只是一个带有 YYYY-MM-DD 参数的普通 to_char 语句,我可以在 SQL Server 中使用 GETDATE(), 20 但我不知道如何为这样的拆分语句执行此操作

" 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)对其进行转换,但没有成功。

【问题讨论】:

  • 你的 SQL Server 是哪个版本的?
  • 是 SQL Server 2017

标签: java sql sql-server oracle migration


【解决方案1】:

您可以在 SQL Server 中查看DATEPART 函数。它允许您提取给定日期和时间值的特定部分。例如:

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

另外,如文档中所述,它返回整数,因此无需额外转换。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-17
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-08
    相关资源
    最近更新 更多