In SQL Server, the SYSUTCDATETIME function returns the current date and time with 100 nanoseconds precision (7 fractional digits) in the UTC time zone.
SYSUTCDATETIME() returns the actual current date and time, but SQL Server can optimize how many times it is evaluated within a statement (run-time constant).
In PostgreSQL you can use the CLOCK_TIMESTAMP() AT TIME ZONE 'UTC' function, which also returns the actual current date and time with microseconds precision (6 fractional digits) in the UTC time zone.
SQL Server:
-- Get the current date and time with 100 nanoseconds precision in UTC SELECT SYSUTCDATETIME(); /* 2026-08-10 10:01:50.1839299 */
PostgreSQL:
-- Get the current date and time with microseconds precision in UTC SELECT CLOCK_TIMESTAMP() AT TIME ZONE 'UTC'; /* 2026-08-10 10:01:50.183929 */
Unlike the SYSUTCDATETIME() and CLOCK_TIMESTAMP() functions, which return the actual current date and time, the NOW() and CURRENT_TIMESTAMP functions return the start date and time of the current transaction.
SQL Server:
-- Start a new transaction BEGIN TRANSACTION -- Get the current date and time SELECT SYSUTCDATETIME(); /* 2026-08-10 10:08:33.8658770 */ -- Wait 3 seconds WAITFOR DELAY '00:00:03' -- Get the current date and time again (reflects the 3-second wait) SELECT SYSUTCDATETIME(); /* 2026-08-10 10:08:36.8682106 */ COMMIT;
PostgreSQL:
-- Start a new transaction BEGIN; -- Get the current date and time SELECT CLOCK_TIMESTAMP() AT TIME ZONE 'UTC', NOW() AT TIME ZONE 'UTC', CURRENT_TIMESTAMP AT TIME ZONE 'UTC'; /* 2026-08-10 08:15:06.140739 | 2026-08-10 08:15:06.169246 | 2026-08-10 08:15:06.169246 */ -- Wait 3 seconds SELECT PG_SLEEP(3); -- Get the current date and time again (Only CLOCK_TIMESTAMP reflects the 3-second wait) SELECT CLOCK_TIMESTAMP() AT TIME ZONE 'UTC', NOW() AT TIME ZONE 'UTC', CURRENT_TIMESTAMP AT TIME ZONE 'UTC'; /* 2026-08-10 08:15:09.140742 | 2026-08-10 08:15:06.169246 | 2026-08-10 08:15:06.169246 */ COMMIT;
You can see that within the same transaction, NOW() and CURRENT_TIMESTAMP always return the same value regardless of the transaction's duration. This might not always be the desired behavior.
For more information, see SQL Server to PostgreSQL Migration.