【问题标题】:Select a datetime in Tsql, trim the milliseconds and return as a string在 Tsql 中选择一个日期时间,修剪毫秒并以字符串形式返回
【发布时间】:2017-05-23 12:14:03
【问题描述】:

问题:我想选择一个日期(存储为日期时间)并返回一个 string 并去掉毫秒。

eg  2017-01-04 08:47:30.0000000 => "2017-01-04 08:47:30"

我目前的解决方案:

我有 3 条语句可以完成上述操作:

子字符串选项

 select  
    SUBSTRING(CONVERT(nvarchar,EventDate),0,20) 
 from  EventsTable

双重转换

select  
     CONVERT(nvarchar, CONVERT(datetime2(0),EventDate))  
from  EventsTable

短 nvarchar

select  
   CONVERT(nvarchar(19),EventDate) 
from  EventsTable

上述所有解决方案都有效并实现了我的目标。

问题: 实现我的目标的最佳做法/最有效的方法是什么?

【问题讨论】:

标签: tsql datetime


【解决方案1】:

在您的转换中使用日期样式:

select CONVERT(varchar(19),EventDate,120)
from  EventsTable

我会用这个。它只使用一个函数,并为 varchar 设置正确的长度,格式告诉 SQL Server 你需要的正确格式。

由于样式 120 是一种标准,因此无论您的数据库或会话上的本地化设置如何,您都可以确定它是相同的。

【讨论】:

  • 顺便说一句,当我在会话中尝试使用丹麦语设置的 3 段代码时,我得到了以下回复:Jan 9 2017 11:38AM 2017-01-09 11:38:24 Jan 9 2017 11:38AM
  • 抱歉,我的评论格式有问题,我的意思是我得到了两种日期格式,这就是为什么我会建议始终确保你得到正确的样式,通过使用它在转换中,就像在我的回答中一样,或者通过明确设置区域日期格式
【解决方案2】:

我在启用了 SQL Server 2008R2 的执行计划的情况下运行了所有三个查询。

我收到的所有费用都相等(各 33%)。

所有三个查询都占用相同的时间和资源。

但是,第三个可能会帮助您减少编写的代码。

【讨论】:

    猜你喜欢
    • 2022-11-23
    • 2015-12-20
    • 2015-12-19
    • 1970-01-01
    • 1970-01-01
    • 2017-05-10
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多