sql >> Databáze >  >> RDS >> Sqlserver

Jak převést sloupec časového razítka SQL Serveru do formátu datetime

SQL Server TIMESTAMP datový typ nemá nic co do činění s datem a časem!

Je to jen hexadecimální reprezentace po sobě jdoucího 8bajtového celého čísla – je to dobré pouze pro zajištění toho, aby se řádek nezměnil od doby, kdy byl přečten.

Můžete odečíst hexadecimální celé číslo nebo chcete-li BIGINT . Jako příklad:

SELECT CAST (0x0000000017E30D64 AS BIGINT)

Výsledkem je

400756068

V novějších verzích SQL Server se nazývá RowVersion - protože to tak opravdu je. Viz dokumenty MSDN na ROWVERSION:

Je to datový typ, který zpřístupňuje automaticky generovaná jedinečná binární čísla v databázi. rowversion se obecně používá jako mechanismus pro označování verzí řádků tabulky. Datový typ therowversion je pouze vzrůstající číslo a nezachovává datum ani čas . Chcete-li zaznamenat datum nebo čas, použijte datový typ datetime2.

Takže nemůžete převést SQL Server TIMESTAMP na datum/čas – prostě to není datum/čas.

Ale pokud říkáte časové razítko, ale ve skutečnosti máte na mysli DATETIME sloupec - pak můžete použít jakýkoli z těchto platných formátů data popsaných v tématu CAST a CONVERT v nápovědě MSDN. Ty jsou definovány a podporovány „z krabice“ SQL Serverem. Cokoli jiného není podporováno, např. musíte udělat hodně ručního odlévání a zřetězení (nedoporučuje se).

Formát, který hledáte, vypadá trochu jako ODBC canonical (styl =121):

DECLARE @today DATETIME = SYSDATETIME()

SELECT CONVERT(VARCHAR(50), @today, 121)

dává:

2011-11-14 10:29:00.470

SQL Server 2012 bude mít konečně FORMAT funkce pro vlastní formátování......



  1. Jak dynamicky pivotovat s datem jako sloupcem

  2. dbms_metadata.get_ddl nefunguje

  3. Vraťte konec měsíce v SQLite

  4. Jak dosáhnout vysoké dostupnosti PostgreSQL pomocí pgBouncer