【SQL】GETDATE()の値が一致する条件を知りたいです!
■解決したいこと(気になること)
SQLServerで(他のSQLでもおそらく同様な気がしているのですが)、
- GETDATE()で日時が一致する条件を知りたいです。
- また、この動きはSQLServerの仕様なのでしょうか?
- 仕様なのだとすれば、その仕様の背景についての一次ソースやわかりやすいサイト、などあれば教えていただきたいです。
※SQLServerのバージョンは、
Microsoft SQL Server Management Studio 18
です。
■具体例
declare @x int = 0
declare @date1 datetime = GETDATE()
declare @date2 datetime
while @x <= 2000
BEGIN
SET @x = @x + 1
SET @date2 = GETDATE()
END
select @date1,@date2
①ループが2000回 ⇒ GETDATE()の値は一致。
②ループが2100回 ⇒ GETDATE()の値が異なる。
①②より、
ループが2000回までは0.000秒差で、ループが100回分増えただけで0.003秒増えたとは考えにくいです。
⇒差が0.003秒以内なら同じ秒数とするというような内部処理がSQLServerの仕様で決まっている説?
ただし、そのような仕様が説明されたサイト等を見つけることができませんでした。。。
■考えたこと
はじめ、①ループが2000回の時もGETDATE()の値が異なると想定していました。
というのも、ループごとに現在の日時をセットしているため、2000回もループすれば0.001秒くらいずれるだろうと思っていました。
しかし①ループが2000回で動かしてみると、GETDATE()の値は一致しました。
次に、(同一ステートメントではないなら)GETDATE()の値は同じとSQLServerくんはみなす仕様なのかな?と仮説をたてて、ループが何回でもGETDATE()の値は一致になると想定しました。
しかし②ループが2100回で動かしてみると、GETDATE()の値は異なりました・・・
謎が深まるばかりです。。。
■自分で試したこと
一応、マイクロソフトさんの公式サイトを見ましたが求める内容は記載されていませんでした。
また、上記文章で「(同一ステートメントではないなら)」と記載したのは、
GOと書けば、GETDATE()の値が異なることは動かして確認しました。
よろしくお願いします!