Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 日期转换为Varchar的字母T_Sql_Sql Server 2008_Datetime_Varchar - Fatal编程技术网

Sql 日期转换为Varchar的字母T

Sql 日期转换为Varchar的字母T,sql,sql-server-2008,datetime,varchar,Sql,Sql Server 2008,Datetime,Varchar,我看到一篇类似于这篇文章的文章,其中有一个解决方案,它更多的是解决这个问题,而不是一个解决方案 我们正在将SQL从2008年迁移到2012年。已有一个无法更改的流程。基本上,应用程序接受数据库中存储的查询并按计划运行查询,然后在某些情况下返回结果并以HTML格式的电子邮件发送 问题是,当使用SQL 2008发送电子邮件时,当前应用程序将日期格式化为“MM/DD/YYY HH:MM:SS AM”,但在2012服务器上使用完全相同的代码,我们得到“YYYY MM DDHH:MM:SS 000”,在军

我看到一篇类似于这篇文章的文章,其中有一个解决方案,它更多的是解决这个问题,而不是一个解决方案

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

问题是,当使用SQL 2008发送电子邮件时,当前应用程序将日期格式化为“MM/DD/YYY HH:MM:SS AM”,但在2012服务器上使用完全相同的代码,我们得到“YYYY MM DDHH: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,并在XML数据周围放置HTML标记:

'<TABLE>' + XML + '</TABLE>'
“”+XML+“”
然后使用dbmail发送电子邮件

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

SELECT start_date FROM base_table
开始日期 2004年10月15日下午1:00

2005年10月21日下午5:25

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

SELECT start_date FROM base_table
开始日期 2004-10-15T13:00:00.000

2005-21-21T17:25:00.000

我知道这很复杂,但这是我们必须解决的问题


谢谢

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

设置日期格式

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


应用程序使用什么连接到SQL Server?它运行什么查询?请同时发布相关字段的定义。更新了帖子…希望更清晰一点。但主要的问题是…为什么在新服务器上会有所不同?有什么想法吗?非常感谢。