Дата сервера sql в формате гггг-мм-ддчч: мм: ссз - PullRequest
18 голосов
/ 24 мая 2011

Мне нужно отформатировать набор дат на сервере SQL в следующий формат.

yyyy-MM-ddThh:mm:ssZ

Я не могу найти, как отформатировать дату с частями T и Z, включенными в строку

Есть идеи, как добиться этого формата в запросе SQL?

Ответы [ 4 ]

15 голосов
/ 24 мая 2011

В соответствии с онлайновой страницей книг по SQL Server 2005 на Преобразование и преобразование используется формат даты 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 для удаления миллисекунд, поскольку они будут в фиксированном положении изслева от строки.т.е.

SELECT STUFF(CONVERT(VARCHAR(50),GETDATE(), 127) ,20,4,'')
5 голосов
/ 14 апреля 2016

Вы можете проанализировать вывод C # в SQL, используя ниже:

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

            }

        }

    }

}
1 голос
/ 18 декабря 2017
select left(convert(varchar(30),getdate(),126)+ '.000',23)    
0 голосов
/ 27 апреля 2019

Попробуйте это

 SELECT STUFF(
     CONVERT(datetime2(0), GETDATE(), 126)      
    AT TIME ZONE 'US Eastern Standard Time'   
    ,11,1,'T')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...