【问题标题】:Alternative to using FORMAT in SQL Server 2008 R2在 SQL Server 2008 R2 中使用 FORMAT 的替代方法
【发布时间】:2019-08-10 05:55:45
【问题描述】:

我在 SQL Server 2012 中使用以下内容创建了一个 SELECT:

SELECT 
CAST(FORMAT(CONVERT(DATETIME, date_time, 127), 'yyyy-MM-ddTHH:mm:ssZ') AS NVARCHAR(20)) TimeStamp,
FROM myTable

这将导致日期格式为2019-03-15T13:25:19Z

如何使用 SQL Server 2008 R2 或更早版本实现相同的结果?

【问题讨论】:

  • 在 2012+ 年也不要使用 FORMAT。这是一个糟糕的功能。
  • 我的意思是....为什么在您的查询中使用FORMAT?,只需CONVERT(varchar(20),date_time,127) 就可以了

标签: sql-server tsql sql-server-2012 sql-server-2008-r2


【解决方案1】:

只需使用CONVERT,您就可以更轻松地实现这一目标:

SELECT CONVERT(varchar(19),GETDATE(),127) + 'Z';

正如我在评论中提到的 FORMAT 实际上是一个糟糕的功能,它的性能非常糟糕。我今天早些时候在另一个问题上发布了answer,与CONVERT 相比,它的表现有多糟糕。不要只在你的 2008- 服务器上使用这个表达式,也用这个替换你 2012+ 服务器上的 FORMAT 表达式。

【讨论】:

  • 我一直认为像 format, isnull, ... 这样的函数只有在 where 子句中使用时才表现不佳。我今天学到了一些重要的东西
  • FORMAT()函数 而不是 表达式。来自文档:_使用 FORMAT 函数将日期/时间和数字值设置为字符串的区域感知格式。
  • ISNULLFORMATWHERE 子句和 @GuidoG 中都有性能影响,但这是由于 SARGability。然而,FORMAT 只是一个糟糕的功能。不知道他们是如何管理它的,但它确实是一个巨大的性能杀手。
  • @Sami 是的,FORMAT 是一个函数,但 CONVERT(varchar(19),GETDATE(),127) + 'Z' 是一个表达式。
  • 我的意思是WHERE 子句,我更新了我的评论,对此感到抱歉
【解决方案2】:

我认为这是你想要的:

select replace(convert(varchar(255), getdate(), 120), ' ', 'T') + 'Z'

代码127 返回毫秒,您似乎并不想要,所以120 似乎更合适。

【讨论】:

    猜你喜欢
    • 2014-04-18
    • 2014-08-20
    • 1970-01-01
    • 2011-03-25
    • 2013-05-16
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多