Plus Performantes Moyen pour Convertir DateTime au Format Int
J'ai besoin de convertir les champs Datetime pour une formaté de manière spécifique le type INT. Par exemple, je veux
2000-01-01 00:00:00.000
convertir 20010101
.
Ce qui est le plus performant façon de faire de la conversion à des fins de comparaison dans une requête?
Quelque chose comme:
DATEPART(year, orderdate) * 10000 + DATEPART(month, orderdate) * 100 +
DATEPART(day, orderdate)
ou
cast(convert(char(8), orderdate, 112) as int)
Ce qui est le plus performant façon de le faire?
Réponse Simple: tester les deux et de voir laquelle est la "meilleure" (par exemple, plus rapide, utilise moins de CPU, utilise moins de lectures/écritures, etc)
Comment 01 jan 2000 devient "20100101" s'il vous plaît?
Oups, quand je fais une faute de frappe. 🙂
Comment 01 jan 2000 devient "20100101" s'il vous plaît?
Oups, quand je fais une faute de frappe. 🙂
OriginalL'auteur DavidStein | 2010-09-01
Vous devez vous connecter pour publier un commentaire.
Votre exemple de
cast(convert(char(8), orderdate, 112) as int)
semble bien pour moi. Il obtient rapidement la date vers le format dont vous avez besoin et converti en int.À partir d'un plan d'exécution de point de vue, il semble y avoir aucune différence entre les deux.
OriginalL'auteur LittleBobbyTables
Est-ce que vous avez besoin
cast(convert(char(8), orderdate, 112) as int)
, qui fonctionnera tout aussi bien. Votre exemple ne prend même pas la conversion d'un INT en compte.OriginalL'auteur Abdallah
Lorsque vous pass '2010-01-01 00:00:00.000' directement dans votre code, l'instruction SELECT regarde comme une chaîne de caractères et non un type de données datetime. Ce n'est pas la même que la sélection d'un champ datetime directement.
Il n'y a aucun besoin de faire l'extérieur CAST car SQL Server fera la conversion implicite, ici en est la preuve.
SELECT CONVERT(INT, CAST ('2013-08-05 09:23:30' as DATETIME))
vient de ici la conversion est impliciteOriginalL'auteur Abdallah