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í......