sql-server - texte - sql time




Comment supprimer la partie heure d'une valeur datetime(SQL Server)? (4)

Voici ce que j'utilise:

SELECT CAST(FLOOR(CAST(getdate() as FLOAT)) as DATETIME)

Je pense qu'il peut y avoir un moyen meilleur et plus élégant.

Exigences:

  • Il doit être aussi rapide que possible (moins il y a de castings, mieux c'est).
  • Le résultat final doit être un type datetime - datetime , pas une chaîne.

Itzik Ben-Gan dans DATETIME Calculs, 1re partie (SQL Server Magazine, février 2007) montre trois méthodes pour effectuer une telle conversion (la plus lente à la plus rapide ; la différence entre la deuxième et la troisième méthode est faible):

SELECT CAST(CONVERT(char(8), GETDATE(), 112) AS datetime)

SELECT DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)

SELECT CAST(CAST(GETDATE() - 0.50000004 AS int) AS datetime)

Votre technique (casting to float ) est suggérée par un lecteur dans le numéro d'avril du magazine. Selon lui, ses performances sont comparables à celles de la deuxième technique présentée ci-dessus.


S'il vous plaît essayez:

SELECT CONVERT(VARCHAR(10),[YOUR COLUMN NAME],105) [YOURTABLENAME]

SQL2005: Je recommande l'utilisation de cast au lieu de dateadd. Par exemple,

select cast(DATEDIFF(DAY, 0, datetimefield) as datetime)

en moyenne environ 10% plus rapide sur mon jeu de données, que

select DATEADD(DAY, DATEDIFF(DAY, 0, datetimefield), 0)

(et casting dans smalldatetime était encore plus rapide)


Votre CAST - FLOOR - CAST semble déjà être le moyen optimal, du moins sur MS SQL Server 2005.

Certaines solutions que j'ai déjà vues ont une conversion de chaîne, telle que Select Convert(varchar(11), getdate(),101) , qui est plus lente d'un facteur 10.







date-conversion