SQL Servers TIMESTAMP
datatypen har inget att göra med ett datum och en tid!
Det är bara en hexadecimal representation av ett på varandra följande 8 byte heltal - det är bara bra för att se till att en rad inte har ändrats sedan den lästes.
Du kan läsa av det hexadecimala heltal eller om du vill ha en BIGINT
. Som ett exempel:
SELECT CAST (0x0000000017E30D64 AS BIGINT)
Resultatet är
400756068
I nyare versioner av SQL Server heter den RowVersion
- eftersom det verkligen är vad det är. Se MSDN-dokumenten på ROWVERSION:
Är en datatyp som exponerar automatiskt genererade, unika binära tal i en databas. rowversion används vanligtvis som en mekanism för versionsstämpling av tabellrader. Rowversionens datatyp är bara ett ökande antal och bevarar inte ett datum eller en tid . För att spela in ett datum eller en tid, använd en datatyp datetime2.
Så du kan inte konvertera en SQL Server TIMESTAMP
till ett datum/tid - det är bara inte ett datum/tid.
Men om du säger tidsstämpel men egentligen menar du en DATETIME
kolumn - då kan du använda vilket som helst av dessa giltiga datumformat som beskrivs i CAST och CONVERT-ämnet i MSDN-hjälpen. Dessa definieras och stöds "out of the box" av SQL Server. Något annat stöds inte, t.ex. du måste göra mycket manuell gjutning och sammanfogning (rekommenderas inte).
Formatet du letar efter ser lite ut som ODBC canonical (stil =121):
DECLARE @today DATETIME = SYSDATETIME()
SELECT CONVERT(VARCHAR(50), @today, 121)
ger:
2011-11-14 10:29:00.470
SQL Server 2012 kommer äntligen att ha ett FORMAT
funktion för att göra anpassad formatering......