Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.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 server 格式为yyyy MM ddThh:MM:ssZ的sql server日期_Sql Server_Datetime_Format - Fatal编程技术网

Sql server 格式为yyyy MM ddThh:MM:ssZ的sql server日期

Sql server 格式为yyyy MM ddThh:MM:ssZ的sql server日期,sql-server,datetime,format,Sql Server,Datetime,Format,我需要将SQL server中的一组日期格式化为以下格式 yyyy-MM-ddThh:mm:ssZ 我似乎找不到如何用字符串中包含的T和Z部分格式化日期 您知道如何在SQL查询中实现此格式吗?根据SQL Server 2005联机丛书页面,您可以使用日期格式127,如下例所示 CONVERT(varchar(50), DateValueField, 127) SQL Server 2000文档未提及此格式-可能仅在2005及更高版本中提供 关于从文档中的注释7添加到末尾的时区的注释:可选的时

我需要将SQL server中的一组日期格式化为以下格式

yyyy-MM-ddThh:mm:ssZ
我似乎找不到如何用字符串中包含的T和Z部分格式化日期


您知道如何在SQL查询中实现此格式吗?

根据SQL Server 2005联机丛书页面,您可以使用日期格式127,如下例所示

CONVERT(varchar(50), DateValueField, 127)
SQL Server 2000文档未提及此格式-可能仅在2005及更高版本中提供

关于从文档中的注释7添加到末尾的时区的注释:可选的时区指示符Z用于更容易地将具有时区信息的XML datetime值映射到没有时区的SQL Server datetime值。Z是时区UTC-0的指示器。其他时区在+或-方向上以HH:MM偏移表示。例如:2006-12-12T23:45:12-08:00

感谢Martin的提示:您应该能够使用STUFF删除毫秒,因为这些毫秒将位于字符串左侧的固定位置。i、 e

SELECT STUFF(CONVERT(VARCHAR(50),GETDATE(), 127) ,20,4,'')

您可以使用以下命令在SQL中解析C输出:

SELECT CONVERT(DATETIME, CONVERT(DATETIMEOFFSET,'2017-10-27T10:44:46Z'))
使用C通过以下方式生成:

string ConnectionString = "Data Source=SERVERNAME; Initial Catalog=DATABASENAME; Persist Security Info=True; User ID=USERNAME; Password=PASSWORD";

using(SqlConnection conn = new SqlConnection(ConnectionString))
{
    DateTime d = DateTime.Now;

    string Query = "SELECT CONVERT(DATETIME, CONVERT(DATETIMEOFFSET,'" + d.ToString("yyyy-MM-dd") + "T" + d.ToString("HH:mm:ss") + "Z'))"

    conn.Open();

    using(SqlCommand cmd = new SqlCommand(Query, conn))
    {
        using(SqlDataReader rdr = cmd.ExecuteReader())
        {
            if(rdr.HasRows)
            {
                while(rdr.Read())
                {
                    for(int i; i < rdr.length; i++)
                    {
                        Console.WriteLine(rdr[0].ToString());

                    }

                }

                //DataTable dt = new DataTable(); dt.Load(rdr); //Alternative method if DataTable preferred

            }

        }

    }

}
试试这个

 SELECT STUFF(
     CONVERT(datetime2(0), GETDATE(), 126)      
    AT TIME ZONE 'US Eastern Standard Time'   
    ,11,1,'T')

您使用的是哪个版本的SQL Server?为什么不在应用程序代码中使用它?重复:并同意文档中的说明,但在SQL Server 2008上为我选择CONVERTVARCHAR50,GETDATE,127 returns 2011-05-24T11:39:30.330。似乎与126相同,没有任何Z?OP没有要求毫秒。结果是2011-05-24T16:14:33.830ZI同意Pankaj,毫秒不在sepc问题中,但根据文档,这是唯一包含时区的格式。从文档中可以看出:“可选的时区指示符Z用于更容易地将包含时区信息的XML日期时间值映射到不包含时区的SQL Server日期时间值。Z是时区UTC-0的指示器。其他时区在+或-方向上以HH:MM偏移表示。例如:2006-12-12T23:45:12-08:00。“+1您应该能够使用STUFF删除毫秒,因为这些毫秒将位于字符串左侧的固定位置。i、 e.选择STUFFCONVERTVARCHAR50,GETDATE,127,20,4,时区偏移量如何;将c作为SELECT DATEDIFFHOUR、GETUTCDATE、getdatehh选择STUFFCONVERTVARCHAR50、GETUTCDATE、,127++当C.HH>0时为大小写,当C.HH<0时为“+”,当C.HH<9时为“-”ELSE END+大小写,当C.HH<9时为“0”ELSE END+CASTC.HH,作为NVARCHAR+”:00',20,4,虽然这段代码可以解决这个问题,但它如何以及为什么能够解决这个问题,将真正有助于提高您的帖子质量,并可能导致更多的投票。请记住,你是在将来回答读者的问题,而不仅仅是现在提问的人。请编辑您的答案以添加解释,并指出适用的限制和假设。事实上,这是我编写的代码,已经很长时间了。即使是我,我也不知道我是怎么找到它的,但它100%有效。就这样。谢谢。这是对原来问题的真实回答。这就是在Convert中使用datetime样式127时如何显示时区的方法。
 SELECT STUFF(
     CONVERT(datetime2(0), GETDATE(), 126)      
    AT TIME ZONE 'US Eastern Standard Time'   
    ,11,1,'T')
DECLARE @SampleDate DATETIME2(3) = '2020-07-05 23:59:59';
SELECT CONVERT(VARCHAR(20), CONVERT(DATETIMEOFFSET, @SampleDate), 127);
--results: 2020-07-05T23:59:59Z