Sql 服务器日期格式 DD-Mon-YY
Sql Server Date Format DD-Mon-YY
我们正在努力将我们的应用程序从 Oracle 11 迁移到 SQL Server 2014。我们的 Java 代码中有很多地方需要 DD-Mon-YY
格式的日期。我找不到带有 convert 或任何其他内置函数的选项来执行此操作,而无需将“-”填充到转换后的字符串中。
今天我们使用类似
的东西
upper((((CONVERT(NVARCHAR, Dt_Column, 113), 3, 1, '-'), 7, 3, '-'),1,18))
我们在加载数十万行的同一视图中将其用于多个列,我怀疑它可能会影响我们的性能。任何 inputs/thoughts 都会有所帮助。提前谢谢你。
这将达到预期效果:
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 服务器中使用持久计算列来保存格式化日期。如果您不想在 Java 代码中重命名列引用,您可以重命名源列并将新计算列命名为源列的原始名称。
[PERSISTED] will physically store the computed values in the table, and update the values when any other columns on which the computed column depends are updated
以 Joey 的回答为起点,并将其与 日期和时间样式 部分中的信息相结合 docs.microsoft.com 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
希望对您有所帮助。
我们正在努力将我们的应用程序从 Oracle 11 迁移到 SQL Server 2014。我们的 Java 代码中有很多地方需要 DD-Mon-YY
格式的日期。我找不到带有 convert 或任何其他内置函数的选项来执行此操作,而无需将“-”填充到转换后的字符串中。
今天我们使用类似
的东西upper((((CONVERT(NVARCHAR, Dt_Column, 113), 3, 1, '-'), 7, 3, '-'),1,18))
我们在加载数十万行的同一视图中将其用于多个列,我怀疑它可能会影响我们的性能。任何 inputs/thoughts 都会有所帮助。提前谢谢你。
这将达到预期效果:
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 服务器中使用持久计算列来保存格式化日期。如果您不想在 Java 代码中重命名列引用,您可以重命名源列并将新计算列命名为源列的原始名称。
[PERSISTED] will physically store the computed values in the table, and update the values when any other columns on which the computed column depends are updated
以 Joey 的回答为起点,并将其与 日期和时间样式 部分中的信息相结合 docs.microsoft.com 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
希望对您有所帮助。