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()
освен ако нямате причина да не го правите.