我看到一篇与此类似的帖子,其解决方案比解决方案更能解决这个问题。
我们正在将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
我知道......但这是我们必须合作的事情。
由于
答案 0 :(得分:0)
您可以使用set dateformat命令指定默认日期格式:
SET DATEFORMAT格式
有效格式:mdy,dmy,ymd,ydm,myd,dym