SQLサーバーの一連の日付を次の形式にフォーマットする必要があります。
yyyy-MM-ddThh:mm:ssZ
文字列に含まれるT部分とZ部分で日付をフォーマットする方法を見つけることができないようです
SQLクエリでこの形式を実現する方法はありますか?
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,'')
以下を使用して、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 left(convert(varchar(30),getdate(),126)+ '.000',23)
これを試して
SELECT STUFF(
CONVERT(datetime2(0), GETDATE(), 126)
AT TIME ZONE 'US Eastern Standard Time'
,11,1,'T')