car*_*r_3 18 sql-server format datetime
我需要将SQL Server中的一组日期格式化为以下格式.
yyyy-MM-ddThh:mm:ssZ
Run Code Online (Sandbox Code Playgroud)
我似乎无法找到如何使用字符串中包含的T和Z部分格式化日期
有关如何在SQL查询中实现此格式的任何想法?
Bor*_*att 15
根据关于Cast和Convert的SQL Server 2005书籍在线页面,您可以使用日期格式127 - 如下例所示
CONVERT(varchar(50), DateValueField, 127)
Run Code Online (Sandbox Code Playgroud)
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,'')
Run Code Online (Sandbox Code Playgroud)
DECLARE @SampleDate DATETIME2(3) = '2020-07-05 23:59:59';
SELECT CONVERT(VARCHAR(20), CONVERT(DATETIMEOFFSET, @SampleDate), 127);
--results: 2020-07-05T23:59:59Z
Run Code Online (Sandbox Code Playgroud)
您可以使用以下方法解析SQL中的C#输出:
SELECT CONVERT(DATETIME, CONVERT(DATETIMEOFFSET,'2017-10-27T10:44:46Z'))
Run Code Online (Sandbox Code Playgroud)
使用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
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
54058 次 |
| 最近记录: |