sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan konverteres SQL Servers tidsstempelkolonne til datetime-format

SQL Servers TIMESTAMP datatype har intet at gøre med en dato og tid!

Det er kun en hexadecimal repræsentation af et fortløbende 8 byte heltal - det er kun godt for at sikre, at en række ikke har ændret sig, siden den er blevet læst.

Du kan aflæse det hexadecimale heltal, eller hvis du vil have en BIGINT . Som et eksempel:

SELECT CAST (0x0000000017E30D64 AS BIGINT)

Resultatet er

400756068

I nyere versioner af SQL Server kaldes den RowVersion - da det i virkeligheden er, hvad det er. Se MSDN-dokumenterne på ROWVERSION:

Er en datatype, der afslører automatisk genererede, unikke binære tal i en database. rækkeversion bruges generelt som en mekanisme til versionsstempling af tabelrækker. Rowversion-datatypen er kun et stigende tal og bevarer ikke en dato eller et klokkeslæt . For at optage en dato eller et klokkeslæt skal du bruge en datetime2datatype.

Så du kan ikke konvertere en SQL Server TIMESTAMP til en dato/tid - det er bare ikke en dato/tid.

Men hvis du siger tidsstempel, men virkelig mener du en DATETIME kolonne - så kan du bruge et hvilket som helst af de gyldige datoformater, der er beskrevet i emnet CAST og KONVERT i MSDN-hjælpen. Disse er defineret og understøttet "ud af boksen" af SQL Server. Alt andet understøttes ikke, f.eks. du skal lave en masse manuel støbning og sammenkædning (anbefales ikke).

Det format, du leder efter, ligner en smule ODBC canonical (stil =121):

DECLARE @today DATETIME = SYSDATETIME()

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

giver:

2011-11-14 10:29:00.470

SQL Server 2012 vil endelig have et FORMAT funktion til at lave tilpasset formatering......



  1. Forbedre databasens ydeevne med 400 %

  2. Antal poster returneret af gruppe af

  3. IKKE IN vs IKKE FINDER

  4. MySQL kopidatabase