字母T在日期转换为Varchar

时间:2014-07-01 17:12:55

标签: sql sql-server-2008 datetime varchar

我看到一篇与此类似的帖子,其解决方案比解决方案更能解决这个问题。

我们正在将SQL从2008年移至2012年。已经存在一个无法更改的流程。基本上,应用程序接受存储在数据库中的查询按计划运行查询,然后在某些情况下返回结果并将其发送到HTML格式的电子邮件中。

问题是当前使用SQL 2008发送电子邮件时的应用程序返回格式为" mm / dd / yyy hh:mm:ss AM"但是在2012服务器上使用完全相同的代码我们得到了" yyyy-mm-ddTHH:MM:SS.000"与军事时间和" T"在日期和时间的中间。

我在另一篇文章中看到的解决方案是在查询中格式化日期:

convert(nvarchar, start_date, 121) As [start_date]

哪个有效...但这需要更改当前存储在数据中的所有数百个查询。它在SQL 2008的当前生产环境中工作......但是使用SQL 2012的新应用程序更改了日期格式。在另一个网站上,我看到有类似问题的人,但他们使用的是2008年,问题仍然发生在2008年。那里也没有真正的解决方案。

我们可能会忽略一个设定吗?除非我们绝对必须,否则客户不希望我们更改代码。

因此,存储在数据库中的示例查询将是:

SELECT start_date FROM base_table

然后,存储过程运行查询并将结果作为XML

返回
SET @sql = query + " FOR XML RAW ";
EXEC(@sql);

存储在数据的varchar(max)字段中。

另一个存储过程从该字段获取XML并将HTML标记放在XML数据周围:

'<TABLE>' + XML + '</TABLE>'

然后使用dbmail发送电子邮件。

SQL2008电子邮件中的结果将是:

起始日期

10/15/2004 1:00 PM

10/21/2005 5:25 PM

SQL 2012的电子邮件中的结果将是:

起始日期

2004-10-15T13:00:00.000

2005-21-21T17:25:00.000

我知道......但这是我们必须合作的事情。

由于

1 个答案:

答案 0 :(得分:0)

您可以使用set dateformat命令指定默认日期格式:

  

SET DATEFORMAT格式

     

有效格式:mdy,dmy,ymd,ydm,myd,dym