Sql server Sql Server日期格式DD Mon YY
我们正在努力将我们的应用程序从Oracle 11迁移到SQL Server 2014。在我们的Java代码中,有很多地方希望日期采用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)) 我们在同一个视图中的多个列中使用它,加载了几十万行,我怀疑这可能会影响我们的性能。
DD Mon-YY
格式。我找不到convert或任何其他内置函数的选项,无法在转换后的字符串中填充“-”来完成此操作
今天我们使用的是
upper((((CONVERT(NVARCHAR, Dt_Column, 113), 3, 1, '-'), 7, 3, '-'),1,18))
我们在同一个视图中的多个列中使用它,加载了几十万行,我怀疑这可能会影响我们的性能。任何意见/想法都会有帮助。提前感谢。这将达到预期效果:
SELECT REPLACE(CONVERT(NVARCHAR, Dt_Column, 106), ' ', '-')
Style106
forCONVERT
以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
示例,我不清楚这一部分)。此外,我还提供了一些关于持久化计算列的信息,这可能有助于解决任何性能问题。计算列将存储在表中,然后在视图中引用。