Published on

September 17, 2018

Comprendre le comportement de la fonction CONVERT dans SQL Server

Avez-vous déjà remarqué que lors de l’utilisation de la fonction CONVERT dans SQL Server pour changer le format d’une colonne DATE, le jeu de résultats peut être trié différemment si un alias est utilisé dans la clause ORDER BY ? Dans cet article, nous allons explorer ce comportement et apprendre comment résoudre ce problème.

Commençons par créer un jeu de données d’exemple dans la base de données tempdb :

USE tempdb;
GO

CREATE TABLE customer_master
(
    customer_id INT,
    customer_name VARCHAR(100),
    dob DATETIME
);

INSERT INTO customer_master (customer_id, customer_name, dob)
VALUES
    (10001, 'Johnson', '1992-10-19'),
    (10002, 'Peter', '1957-03-22'),
    (10003, 'Clara', '1981-12-15'),
    (10004, 'Medalyn', '1966-02-18'),
    (10005, 'Sara', '1959-10-16');

Maintenant, trions le jeu de résultats par la colonne dob, qui est de type DateTime :

SELECT customer_id, customer_name, dob
FROM customer_master
ORDER BY dob;

Comme vous pouvez le voir, le résultat est trié par ordre croissant de la colonne dob.

Ensuite, utilisons la fonction CONVERT pour formater la colonne dob au format MM/jj/aaaa dans la liste des colonnes SELECT :

SELECT customer_id, customer_name, CONVERT(VARCHAR(10), dob, 101) AS dob
FROM customer_master
ORDER BY dob;

Si vous observez le résultat, vous remarquerez qu’il n’est pas basé sur la DOB en tant que valeurs de date, mais sur la colonne dob en tant que valeur VARCHAR formatée. La raison en est que le nom “dob” est utilisé comme alias pour les valeurs de date formatées, et lorsqu’il est référencé dans la clause ORDER BY, il trie le jeu de résultats en fonction des valeurs VARCHAR des dates formatées, plutôt que des valeurs DATE originales.

Alors, comment résoudre ce problème ? La solution est simple – utilisez un nom d’alias différent :

SELECT customer_id, customer_name, CONVERT(VARCHAR(10), dob, 101) AS dob_new
FROM customer_master
ORDER BY dob;

En utilisant un nom d’alias différent, le résultat est maintenant trié par la valeur DATE et non par la valeur VARCHAR formatée.

Il est important de prendre conscience de ce comportement lors de l’utilisation de la fonction CONVERT dans SQL Server. En comprenant comment les noms d’alias peuvent affecter le tri des jeux de résultats, vous pouvez vous assurer que vos requêtes produisent les résultats souhaités.

Combien d’entre vous étaient déjà conscients de ce comportement ? Faites-le nous savoir dans les commentaires !

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.