Sql server Sql Server日期格式DD Mon YY

Sql server Sql Server日期格式DD Mon YY,sql-server,datetime,datetime-format,Sql Server,Datetime,Datetime Format,我们正在努力将我们的应用程序从Oracle 11迁移到SQL Server 2014。在我们的Java代码中,有很多地方希望日期采用DD Mon-YY格式。我找不到convert或任何其他内置函数的选项,无法在转换后的字符串中填充“-”来完成此操作 今天我们使用的是 upper((((CONVERT(NVARCHAR, Dt_Column, 113), 3, 1, '-'), 7, 3, '-'),1,18)) 我们在同一个视图中的多个列中使用它,加载了几十万行,我怀疑这可能会影响我们的性能。

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

今天我们使用的是

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

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

这将达到预期效果:

SELECT REPLACE(CONVERT(NVARCHAR, Dt_Column, 106), ' ', '-')
Style
106
for
CONVERT
dd mon-yyyy
格式提供日期,您只需将空格替换为破折号即可

更新

根据格式中还应包含时间的附加信息,您可以尝试使用
格式

SELECT FORMAT(SYSDATETIME(), 'dd-MMM-yyyy hh:mm:ss')
需要记住的一点是,
格式
依赖于CLR,因此需要衡量性能影响。尽管如此,对于数据集,对
格式的单个调用可能与多个本机函数调用等效,或者可能执行得更好

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

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


以Joey的答案为起点,结合docs.microsoft.comCAST and CONVERT(Transact-SQL)页面中日期和时间样式部分的信息,转换(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()的其他日期时间格式:


我希望这能有所帮助。

很抱歉,我找不到使用getDate()转换的选项。多亏了这里的所有输入。这是我能到达的最近的一次,我收到了输入:
SELECT REPLACE(CONVERT(NVARCHAR,GETDATE(),106),“,”,-”)+CONVERT(NVARCHAR,GETDATE(),108)性能仍然比我原来的查询差25%。谢谢Joey,这确实非常接近我的需要。只需要找到一种方法,将时间戳包含到该文件中。现在检查选项。@rsreji我用一些关于如何实现的附加信息更新了我的答案,包括时间戳和输出(根据您问题中给出的
DD Mon YYYY
示例,我不清楚这一部分)。此外,我还提供了一些关于
持久化
计算列的信息,这可能有助于解决任何性能问题。计算列将存储在表中,然后在视图中引用。