QUOTENAME改变日期格式

时间:2017-01-18 11:26:37

标签: sql-server

我的表格中有一个日期时间字段,显示如下日期:

2017-01-18 10:20:19.617

我正在使用QUOTENAME输出包含在引号中的字段的表格,以便与导入基于CSV的旧应用程序兼容。

SELECT QUOTENAME(P.CreatedOn,'"') as CreatedOn

将输出更改为

"Jan 18 2017 10:20AM"

理想情况下我需要

"2017-01-18 10:20:19.617"

这可能吗?

2 个答案:

答案 0 :(得分:3)

这应该可以解决问题。 CONVERT功能允许您明确控制日期转换的格式。

declare @d datetime = '20170119 20:21:22'
select QUOTENAME(CONVERT(varchar(23), @d, 121), '"')

一些指导说明:

  • 样式参数121指示必须以ODBC格式yyyy-mm-dd HH:MM:ss[.ttt[tttt]][{+|-}offset]格式化日期/时间。它总是包括3或7位的分数,具体取决于要转换的值的日期类型。
  • 这支持所有组合日期和时间的数据类型。 time:datetime,datetime2(一秒的7位数分数),smalldatetime,datetimeoffset
  • 日期和时间数据类型分别排除日期与字符串分开的时间。
  • 请参阅链接页面以试验其他转换样式。例如。样式120类似,但从格式中排除了秒的可选分数。
  • 请注意,如果varchar(...)目标类型为短以保存完整字符串,则会从右侧截断。

答案 1 :(得分:0)

QUOTENAME返回nvarchar (258)。当您向该函数提供DATE时,它会转换为nvarchar

如果您先转换为varcharnvarchar(如@CraigYoung建议),则此函数本身不会进行转换,也不会更改字符串。

CONVERT中,您可以使用列表可用格式指定日期所需的任何格式。