通过 T-SQL 将 SQL Server 日期时间格式化为 %Y-%m-%d %H:%M:%OS4 %z 格式?

CRS*_*ser 1 t-sql sql-server datetime sql-server-2012

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

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

我从 SQL 得到的输出如下:

2016-03-16 00:00:00.000
Run Code Online (Sandbox Code Playgroud)

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

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

我已经尝试过例如

cast(convert(datetime, tn.last_settled, 126) as Varchar(30))
Run Code Online (Sandbox Code Playgroud)

datetime结果Jan 1 1990 12:00AM不是所需的格式。

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

lc.*_*lc. 5

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

FORMAT(tn.last_settled, 'yyyy-MM-dd HH-mm:ss.ffff')
Run Code Online (Sandbox Code Playgroud)

要将字符串输入转换为日期时间,您应该能够使用PARSE

PARSE(@theStringValueTheySendYou as datetime)
Run Code Online (Sandbox Code Playgroud)