sql server date的格式为yyyy-MM-ddThh:mm:ssZ

问题描述 投票:18回答:4

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

yyyy-MM-ddThh:mm:ssZ

我似乎无法找到如何使用字符串中包含的T和Z部分格式化日期

有关如何在SQL查询中实现此格式的任何想法?

sql-server datetime format
4个回答
15
投票

根据Cast and Convert上的SQL Server 2005书籍在线页面,您使用日期格式127 - 根据下面的示例

CONVERT(varchar(50), DateValueField, 127)

SQL Server 2000文档没有引用此格式 - 也许只能从2005及以上版本获得。

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

感谢Martin为本说明:你应该能够使用STUFF来消除毫秒,因为它们将位于字符串左边的固定位置。即

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

5
投票

您可以使用以下方法解析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

            }

        }

    }

}

1
投票
select left(convert(varchar(30),getdate(),126)+ '.000',23)    

0
投票

试试这个

 SELECT STUFF(
     CONVERT(datetime2(0), GETDATE(), 126)      
    AT TIME ZONE 'US Eastern Standard Time'   
    ,11,1,'T')
© www.soinside.com 2019 - 2024. All rights reserved.