Мне нужно отформатировать набор дат на SQL-сервере в следующем формате.
yyyy-MM-ddThh:mm:ssZ
Кажется, я не знаю, как отформатировать дату с помощью частей T и Z, включенных в строку
Любые идеи о том, как достичь этого формата в SQL-запросе?
Мне нужно отформатировать набор дат на 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. Другие часовые пояса обозначены с помощью ЧЧ: ММ смещение в + или - направлении. Например: 2006-12-12T23: 45: 12-08: 00.
Благодаря Мартину для этой заметки: вы должны иметь возможность использовать STUFF для удаления miliseconds, поскольку они будут находиться в фиксированном положении слева от строки. то есть.
SELECT STUFF(CONVERT(VARCHAR(50),GETDATE(), 127) ,20,4,'')
Вы можете проанализировать вывод С# в 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
}
}
}
}
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')
Пожалуйста, попробуйте, он будет отлично работать во всех версиях SQL Server
SELECT CONVERT (varchar (23), DateValueField, 127)