web-dev-qa-db-ja.com

yyyy-MM-ddThh:mm:ssZ形式のSQLサーバーの日付

SQLサーバーの一連の日付を次の形式にフォーマットする必要があります。

yyyy-MM-ddThh:mm:ssZ

文字列に含まれるT部分とZ部分で日付をフォーマットする方法を見つけることができないようです

SQLクエリでこの形式を実現する方法はありますか?

18

SQL Server 2005の本のオンラインページ Cast and Convert によると、日付形式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,'')
15
Bork Blatt

以下を使用して、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

            }

        }

    }

}
5
Bek Raupov
select left(convert(varchar(30),getdate(),126)+ '.000',23)    
1
kiko1875

これを試して

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