web-dev-qa-db-fra.com

date du serveur SQL au format aaaa-MM-jjThh: mm: ssZ

J'ai besoin de formater un ensemble de dates sur le serveur SQL au format suivant.

yyyy-MM-ddThh:mm:ssZ

Je n'arrive pas à trouver comment formater la date avec les parties T et Z incluses dans la chaîne

Des idées comment réaliser ce format dans une requête SQL?

18

Selon la page de documentation en ligne de SQL Server 2005 sur Distribution et conversion vous utilisez le format de date 127 - comme dans l'exemple ci-dessous

CONVERT(varchar(50), DateValueField, 127)

La documentation de SQL Server 2000 ne fait aucune référence à ce format - il n'est peut-être disponible qu'à partir de la version 2005.

Remarque sur le fuseau horaire ajouté à la fin (de la note 7 dans la documentation): L’indicateur de fuseau horaire facultatif, Z, permet de mapper plus facilement les valeurs de date/heure XML comportant des informations de fuseau horaire sur fuseau horaire. Z est l'indicateur du fuseau horaire UTC-0. Les autres fuseaux horaires sont indiqués avec HH: décalage MM dans le sens + ou -. Par exemple: 2006-12-12T23: 45: 12-08: 00.

Merci à Martin pour cette remarque: Vous devriez pouvoir utiliser STUFF pour supprimer les millisecondes, car elles se trouveront dans une position fixe à gauche de la chaîne. c'est à dire.

SELECT STUFF(CONVERT(VARCHAR(50),GETDATE(), 127) ,20,4,'')
15
Bork Blatt

Vous pouvez analyser la sortie C # en SQL en utilisant les éléments suivants:

SELECT CONVERT(DATETIME, CONVERT(DATETIMEOFFSET,'2017-10-27T10:44:46Z'))

Utilisez C # pour générer cela en utilisant ce qui suit:

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

            }

        }

    }

}
5
Bek Raupov
select left(convert(varchar(30),getdate(),126)+ '.000',23)    
1
kiko1875