【问题标题】:Oracle datetime which does not exist in SQL ServerSQL Server 中不存在的 Oracle 日期时间
【发布时间】:2019-05-11 10:50:11
【问题描述】:

我有一个 java 程序,其中一些 SQL 语句在此方法中声明:

    public ObservableList<TSTTimeZoneConversion> retrieveTimeZoneConversions() throws TSTDBException
{
    String sql = "";
if (DBConnection.getDbType() == DBConnection.DB_ORACLE)
        sql = "SELECT tzc.tzc_id, tzc.tz_id, tzc.offset_to_utc, 
    to_char( tzc.start_time, 'DD-MM-YYYY HH24:MI' ) start_time, 
    to_char( tzc.end_time, 'DD-MM-YYYY HH24:MI' ) end_time, tz.tz_code 
    FROM timezone_conversion tzc, timezone tz WHERE tzc.tz_id = tz.tz_id ORDER BY tzc_id";
else
        sql = "SELECT STATEMENT FOR SQL SERVER";
    return TSTDB.retrieveDB(sql , TSTDB::TSTTimeZoneConversionMapper);
}

我的问题是,例如,这个DD-MM-YYYY HH24:MI 在 SQL Server 中不存在,我无法弄清楚如何定义带时间的日期。我用FORMAT 尝试过,就像文档中建议的here 一样,但我不知道在这种情况下它是如何工作的。

我的目标是在 else 部分创建一个 SQL Server 查询,这相当于 if 部分中的 oracle 查询。我正在使用 SQL Server 2017。

【问题讨论】:

  • 使用LocalDateTime 可能更容易,然后根据需要进行格式化。

标签: java sql sql-server oracle migration


【解决方案1】:

我找不到与 SQL Server 的CONVERT 函数配合使用的格式掩码。但是FORMAT 在这里似乎可以正常工作,假设您的 SQL Server 版本支持它:

SELECT
    tzc.tzc_id,
    tzc.tz_id,
    tzc.offset_to_utc,
    FORMAT(tzc.start_time, 'dd-MM-yyyy HH:mm', 'en-US') start_time,
    FORMAT(tzc.end_time, 'dd-MM-yyyy HH:mm', 'en-US') end_time,
    tz.tz_code 
FROM timezone_conversion tzc
INNER JOIN timezone tz
    ON tzc.tz_id = tz.tz_id
ORDER BY
    tzc_id;

注意:大写的 HH 代表 24 小时制的小时。对于 12 小时制的小时数,请使用小写 hh

【讨论】:

    猜你喜欢
    • 2014-08-23
    • 2013-08-11
    • 2014-08-09
    • 2011-09-06
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    相关资源
    最近更新 更多