J'ai une instruction SELECT qui utilise GETDATE() pour deux valeurs de colonnes différentes. Je me demande si par la nature des choses ces deux appels de fonction distincts dans le même SELECT retourneront des valeurs identiques à chaque fois?Sélection de la fonction GETDATE() deux fois dans une liste de sélection - même valeur pour les deux?
Répondre
Oui, ils renvoient la même date et heure, à la milliseconde.
SELECT GETDATE(), GETDATE()
Retours
2010-10-29 15:34:06.353 2010-10-29 15:34:06.353
J'ai testé avec 4000, GETDATE()
et ils reviennent tous les mêmes.
La plupart des fonctions système sont évaluées par requête, et non par ligne, sauf celles qui sont par définition statistiquement uniques telles que NEWID(). Cela inclut des choses comme RAND() (qui n'est pas unique, seulement psuedo random) à moins d'être rangées au hasard ligne par ligne avec NEWD().
Déterminisme est pas liée à cette évaluation, car cela signifie « la sortie est la même pour une entrée donnée indépendante de, disons, de langue ou DMY/MDY)
Cette « évaluation une fois par requête » est logique bien sûr , en particulier pour GETDATE()
Si je fais une mise à jour de ligne 10k, je veux que chaque ligne ait la même valeur GETDATE() La mise à jour entière pourrait facilement prendre> 3,33 millisecondes et je ne veux pas de valeurs différentes mes lignes 10k
Ce serait une fois par fonction-par-requête, donc si la requête a plusieurs instances de GETDATE(), chacune d'entre elles provoquerait un invocation de la fonction GETDATE(). – StriplingWarrior
@StriplingWarrior http://sqlfiddle.com/#!6/27bad6/1 dit autrement, et GETDATE() est exécuté une fois par requête – gbn
Eh bien, je ne suis pas entièrement clair sur les rouages internes du plan d'exécution. Je peux totalement voir pourquoi vous vous attendez à ce que GETDATE() soit exécuté deux fois. Cependant, je devine que ça ne fait pas ce que vous attendez. http://sqlfiddle.com/#!6/27bad6/7/0 montre que même sans l'appel de délai, GETDATE() se retrouvera avec des valeurs différentes de temps en temps. – StriplingWarrior
Désolé de le dire, mais je viens d'arriver avec un test pour montrer que ce ne sera pas toujours renvoie la même valeur. Il est en fait évalué deux fois, et si l'horloge du système arrive à tourner pendant le temps entre ces deux évaluations, vous pouvez obtenir des temps légèrement différents sur les deux appels. Cependant, les autres ont raison de dire qu'il ne sera pas évalué une fois par rangée: une seule fois par colonne.
Voir Will GETUTCDATE() return the same value if used twice in the same statement?
test avec 4000 getdate()
ne prouve pas qu'il ne peut jamais arriver.
SET NOCOUNT ON;
DECLARE @T TABLE
(
rownum INT IDENTITY(1,1) PRIMARY KEY,
d1 DATETIME,
d2 DATETIME
)
WHILE (5 > (SELECT COUNT(*) FROM @T WHERE d1 <> d2))
BEGIN
DELETE FROM @T WHERE d1 = d2
INSERT INTO @T
SELECT GETDATE(),GETDATE()
END
SELECT * FROM @T
Exemple Résultats
rownum d1 d2
----------- ----------------------- -----------------------
22381 2011-05-18 12:24:14.433 2011-05-18 12:24:14.437
30912 2011-05-18 12:24:15.420 2011-05-18 12:24:15.423
43234 2011-05-18 12:24:16.717 2011-05-18 12:24:16.720
113360 2011-05-18 12:24:24.210 2011-05-18 12:24:24.213
147855 2011-05-18 12:24:27.817 2011-05-18 12:24:27.820
- 1. Linq éléments de sélection qui existent dans les deux liste
- 2. WIll LINQ mettra en cache une valeur si une sélection pour elle est présentée deux fois?
- 3. Grails: Ajouter une valeur de deux g: sélectionner une liste de sélection multiple HTML
- 4. Déplacement d'éléments dans deux listes de sélection
- 5. Sélection de Max de deux colonnes (revisité)
- 6. - fonction Randomiser retour même valeur pour les deux graines différentes
- 7. Deux paramètres pour la même valeur
- 8. Sélection SQL sur deux lignes
- 9. SQL Sélection entre deux champs en fonction de la valeur d'un champ
- 10. Sélection de la date la plus récente entre deux colonnes
- 11. Insérer une valeur dans la liste de sélection
- 12. JQgrid: Deux listes déroulantes de sélection liées
- 13. insert dans la base de données de sélection mysql deux
- 14. Sélection d'enregistrements entre deux dates dans deux colonnes
- 15. Sélection de lignes uniques dans un ensemble de deux possibilités
- 16. LINQ et une sélection avec deux tables
- 17. même fonction pour deux boutons dans jQuery
- 18. Jquery - trois listes de sélection, désactiver les deux autres si une valeur est sélectionnée
- 19. la sélection d'une liste de sélection dans jquery
- 20. Jquery. Sélection de la fonction pour la sélection à l'intérieur de certains menus?
- 21. JPA persiste deux fois la même entité
- 22. liste de sélection pour l'iPhone qui ressemble à la fonction de sélection de pays
- 23. CheckBox change la valeur deux fois
- 24. diviser les résultats de deux instructions de sélection PL/SQL
- 25. différence de temps entre deux fois dans la même table
- 26. PL/SQL - utilise deux fois la même fonction pipelined dans la même requête
- 27. Comment implémenter: deux vues coordonnant la même sélection dans Eclipse RCP?
- 28. jQuery: Modifier "action" en fonction de la valeur de sélection
- 29. La fonction JavaScript boucle deux fois plus de fois
- 30. Sélection d'une plage avec deux champs
Ce comportement n'est pas fiable. Voir mon message. – StriplingWarrior
Oui. 4000 n'est pas assez élevé pour voir ce comportement de manière fiable comme le montre ma réponse. –
-1 puisque ce n'est malheureusement pas correct, voir la réponse par @MartinSmith – Oskar