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)