【问题标题】:Formatting a SQL Server Datetime into %Y-%m-%d %H:%M:%OS4 %z format via T-SQL?通过 T-SQL 将 SQL Server 日期时间格式化为 %Y-%m-%d %H:%M:%OS4 %z 格式?
【发布时间】:2016-07-03 03:35:29
【问题描述】:

供应商要求我将 SQL Server DateTime 值转换为以下特定时间戳格式 %Y-%m-%d %H:%M:%OS4 %z。查询将被放入他们的软件中以查询我的数据库。

所需的输出似乎与 R 中的 posixct question 模糊相关;但这是关于 SQL Server 中的输出。除了该字段在他们的软件中显示为空白之外,我没有得到任何具体错误,但它在我的 SQL 界面中有效。

我从 SQL 得到的输出如下:

2016-03-16 00:00:00.000

像这样的另一列的输出varchar(30)2016-03-16 11:34:36 没有问题,因为它只是将其视为一个字符串 WHEN 映射到一个字符串字段.. 但要处理它需要在引用%Y-%m-%d %H:%M:%OS4 %z 格式。

除了数据类型之外,这些差异似乎很微妙,但即使映射到字符串字段,它也无法将 SQL 原生输出映射到其中一个字段。

例如我已经尝试过

cast(convert(datetime, tn.last_settled, 126) as Varchar(30))

datetime 上,但这会导致Jan 1 1990 12:00AM 而不是所需的格式。

如何从 T-SQL 中的 SQL Server datetime 格式将所需的字符串 2016-03-16 11:34:36 和 datetime 2016-03-16 00:00:00.000 格式转换为所需的 %Y-%m-%d %H:%M:%OS4 %z 格式?

【问题讨论】:

  • 听起来他们已经编写了他们的应用程序来解析字符串,而不是使用日期时间(也许它们来自一个本身不处理日期时间的数据库)。您使用的是什么版本的 SQL Server?
  • @lc。我正在运行 SQL 2012

标签: sql-server tsql datetime sql-server-2012


【解决方案1】:

对于 SQL Server 2012 及更高版本,您应该能够将 FORMAT 与标准 .NET 格式化字符串一起使用,以提供所需的输出。例如:

FORMAT(tn.last_settled, 'yyyy-MM-dd HH-mm:ss.ffff')

要将您的字符串 input 转换为日期时间,您应该可以使用 PARSE:

PARSE(@theStringValueTheySendYou as datetime)

【讨论】:

  • 如果我小写日期时间的年份(yyyy vs. YYYY),但不是字符串。我必须对与之配对的字符串进行转换才能使第二部分正常工作。 FORMAT(convert(datetime,tk.last_start_date,126), 'yyyy-MM-dd HH-mm:ss.ffff')
  • @CRSouser 对不起,小写 y
猜你喜欢
  • 1970-01-01
  • 2017-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-26
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
相关资源
最近更新 更多