sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man konverterar SQL Servers tidsstämpelkolumn till datetime-format

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



  1. 12c Dataredigering

  2. Dela upp funktionsreturnerad post i flera kolumner

  3. cx_Oracle ansluter inte när du använder SID istället för tjänstens namn på anslutningssträngen

  4. Hur man använder Failover-mekanismen för MaxScale