Sql server date в формате yyyy-MM-ddThh: mm: ssZ
Мне нужно отформатировать набор дат на SQL-сервере в следующем формате.
yyyy-MM-ddThh:mm:ssZ
Кажется, я не знаю, как отформатировать дату с помощью частей T и Z, включенных в строку
Любые идеи о том, как достичь этого формата в SQL-запросе?
Ответы
Ответ 1
В соответствии с онлайн-страницей книг SQL Server 2005 на Cast and Convert вы используете формат даты 127 - в соответствии с приведенным ниже примером
CONVERT(varchar(50), DateValueField, 127)
Документация SQL Server 2000 не ссылается на этот формат - возможно, она доступна только с версий 2005 и выше.
Примечание в часовом поясе, добавленном к концу (из примечания 7 в документах): дополнительный индикатор часового пояса, Z, используется для упрощения сопоставления значений даты и времени XML с информацией о часовом поясе в значениях времени и времени SQL Server которые не имеют часового пояса. Z - индикатор для часового пояса UTC-0. Другие часовые пояса обозначены с помощью ЧЧ: ММ смещение в + или - направлении. Например: 2006-12-12T23: 45: 12-08: 00.
Благодаря Мартину для этой заметки: вы должны иметь возможность использовать STUFF для удаления miliseconds, поскольку они будут находиться в фиксированном положении слева от строки. то есть.
SELECT STUFF(CONVERT(VARCHAR(50),GETDATE(), 127) ,20,4,'')
Ответ 2
Вы можете проанализировать вывод С# в SQL, используя ниже:
SELECT CONVERT(DATETIME, CONVERT(DATETIMEOFFSET,'2017-10-27T10:44:46Z'))
Используйте С#, чтобы сгенерировать это, используя следующее:
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
}
}
}
}
Ответ 3
select left(convert(varchar(30),getdate(),126)+ '.000',23)
Ответ 4
Попробуй это
SELECT STUFF(
CONVERT(datetime2(0), GETDATE(), 126)
AT TIME ZONE 'US Eastern Standard Time'
,11,1,'T')
Ответ 5
Пожалуйста, попробуйте, он будет отлично работать во всех версиях SQL Server
SELECT CONVERT (varchar (23), DateValueField, 127)