Sql Server日期格式DD-Mon-YY

时间:2017-07-15 21:17:45

标签: sql-server datetime datetime-format

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

今天我们正在使用像

这样的东西
upper((((CONVERT(NVARCHAR, Dt_Column, 113), 3, 1, '-'), 7, 3, '-'),1,18))

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

2 个答案:

答案 0 :(得分:6)

这将达到预期的效果:

SELECT * FROM service WHERE claimed=?

SELECT REPLACE(CONVERT(NVARCHAR, Dt_Column, 106), ' ', '-') 的样式106CONVERT格式提供日期,然后您可以使用短划线替换空格。

<强>更新

根据格式还应包含时间的其他信息,您可以尝试使用dd mon yyyy

FORMAT

要记住的一件事是SELECT FORMAT(SYSDATETIME(), 'dd-MMM-yyyy hh:mm:ss') 依赖于CLR,因此您需要衡量性能影响。虽然,使用您的数据集,对FORMAT的单个调用可能与多个本机函数调用相同或可能执行得更好。

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

请参阅timerange parameter

  

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

答案 1 :(得分:0)

以Joey的答案为出发点,并将其与docs.microsoft.com CAST和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

我希望这有帮助。

相关问题