【问题标题】:Sql Server Date Format DD-Mon-YYSql Server 日期格式 DD-Mon-YY
【发布时间】:2017-07-15 21:17:44
【问题描述】:

我们正在努力将我们的应用从 Oracle 11 迁移到 SQL Server 2014。我们的 Java 代码中有很多地方需要 DD-Mon-YY 格式的日期。我找不到带有 convert 或任何其他内置函数的选项来执行此操作,而无需将“-”填充到转换后的字符串中。

今天我们使用类似的东西

upper((((CONVERT(NVARCHAR, Dt_Column, 113), 3, 1, '-'), 7, 3, '-'),1,18))

我们在加载几十万行的同一个视图中将它用于多个列,我怀疑它可能会影响我们的性能。任何输入/想法都会有所帮助。提前谢谢你。

【问题讨论】:

  • 抱歉,我找不到使用 getDate() 进行转换的选项。
  • 感谢这里的所有输入。这是我收到的最接近的输入:SELECT REPLACE(CONVERT(NVARCHAR, GETDATE(), 106), ' ', '-') +' '+CONVERT(NVARCHAR, GETDATE(), 108); 性能仍然很差,比我的原始查询差 25%。

标签: sql-server datetime datetime-format


【解决方案1】:

这将达到预期的效果:

SELECT REPLACE(CONVERT(NVARCHAR, Dt_Column, 106), ' ', '-')

CONVERT 的样式106 提供dd mon yyyy 格式的日期,然后您可以简单地用破折号替换空格。

更新

基于格式还应包含时间的附加信息,您可以尝试使用FORMAT

SELECT FORMAT(SYSDATETIME(), 'dd-MMM-yyyy hh:mm:ss')

要记住的一点是FORMAT 依赖于 CLR,因此您需要评估性能影响。虽然,对于您的数据集,对 FORMAT 的一次调用可能与多次本机函数调用相当或可能执行得更好。

在任何一种情况下,如果您发现以正确格式获取日期的影响太大,您可以使用 SQL Server 中的持久计算列来保存格式化的日期。如果您不想在 Java 代码中重命名列引用,则可以重命名源列并将新计算列命名为源列的原始名称。

https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-table-computed-column-definition-transact-sql

[PERSISTED] 将计算值物理存储在表中,并在计算列所依赖的任何其他列更新时更新值

【讨论】:

  • 谢谢乔伊,这绝对是我所需要的。只需要找到一种方法来包含时间戳。现在检查选项。
  • @rsreji 我用一些关于如何实现的附加信息更新了我的答案,包括时间戳和输出(根据你的问题中给出的DD-Mon-YYYY 示例,我不清楚那部分)。此外,我提供了一些关于 PERSISTED 计算列的信息,这可能有助于解决任何性能问题。计算的列将存储在表中,然后在您的视图中引用。
【解决方案2】:

以 Joey 的回答为起点,并将其与 docs.microsoft.com 中 Date and Time Styles 部分的信息相结合 CAST and CONVERT (Transact-SQL) 页面,CONVERT(NVARCHAR, @Value, 6) 发出您要查找的两位数年份。

DECLARE     @Now AS DATETIME = GETDATE()

SELECT          @Now AS '@Now'
            ,   REPLACE(CONVERT(NVARCHAR, @Now, 6), ' ', '-') AS 'Abbr@Now'

/***********************************************************************

    Results:

        @Now                    Abbr@Now
        ----------------------- ---------
        2017-12-22 10:08:33.443 22-Dec-17

        (1 row(s) affected)

 ***********************************************************************/

可以在以下位置找到使用 CONVERT() 的其他 DATETIME 格式: https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql

希望对你有所帮助。

【讨论】:

    猜你喜欢
    • 2019-02-28
    • 2016-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-05
    • 1970-01-01
    • 2018-09-04
    相关资源
    最近更新 更多