SQL Server има куп функции, които връщат текущата дата/час. Две от тях са GETDATE() и SYSDATETIME() функции.
На пръв поглед изглежда, че тези две функции правят едно и също нещо – получават текущата дата и час от операционната система на компютъра, на който се изпълнява екземплярът на SQL Server.
Има обаче фина разлика между двете.
Разликата? Типът на връщаната стойност
Основната разлика между GETDATE() и SYSDATETIME() е във вида на връщаната стойност.
GETDATE()връща datetime стойност.SYSDATETIME()връща datetime2(7) стойност.
Това означава, че SYSDATETIME() има по-голяма точност до части от секунди от GETDATE() .
И двете функции получават текущата дата и час от операционната система на компютъра, на който се изпълнява екземплярът на SQL Server, но дробната точност е различна.
Пример
Ето пример за демонстриране на различните стойности, които се връщат за всяка функция:
SELECT
GETDATE() AS GETDATE,
SYSDATETIME() AS SYSDATETIME; Резултат:
+-------------------------+-----------------------------+ | GETDATE | SYSDATETIME | |-------------------------+-----------------------------| | 2018-06-13 02:48:27.653 | 2018-06-13 02:48:27.6542371 | +-------------------------+-----------------------------+
Така че, както споменахме, SYSDATETIME() , който връща datetime2(7) стойност, има по-голяма дробна точност от GETDATE() , който връща datetime стойност.
datetime2 типът данни също има по-голям диапазон от дати и по избор, определена от потребителя точност.
Кой да използвам?
Microsoft препоръчва да използваме datetime2 с нашите стойности за дата/час. Този тип данни е в съответствие със стандарта SQL и е по-преносим от datetime .
Затова използвайте SYSDATETIME() освен ако нямате причина да не го правите.