sql >> Database >  >> RDS >> Sqlserver

Hoe de tijdstempelkolom van SQL Server te converteren naar datetime-indeling

TIMESTAMP van SQL Server datatype heeft niets te maken hebben met een datum en tijd!

Het is gewoon een hexadecimale weergave van een opeenvolgend geheel getal van 8 bytes - het is alleen goed om ervoor te zorgen dat een rij niet is gewijzigd sinds deze is gelezen.

U kunt het hexadecimale gehele getal aflezen of als u een BIGINT . wilt . Als voorbeeld:

SELECT CAST (0x0000000017E30D64 AS BIGINT)

Het resultaat is

400756068

In nieuwere versies van SQL Server heet het RowVersion - want dat is het echt. Zie de MSDN-documenten op ROWVERSION:

Is een gegevenstype dat automatisch gegenereerde, unieke binaire getallen in een database blootlegt. rowversion wordt over het algemeen gebruikt als een mechanisme voor het afstempelen van tabelrijen. Het gegevenstype van de rijversie is slechts een oplopend getal en behoudt geen datum of tijd . Gebruik een datetime2data-type om een ​​datum of tijd vast te leggen.

Dus je kunt niet converteer een SQL Server TIMESTAMP naar een datum/tijd - het is gewoon geen datum/tijd.

Maar als je tijdstempel zegt, maar je bedoelt een DATETIME kolom - dan kunt u elk van die geldige datumnotaties gebruiken die worden beschreven in het onderwerp CAST en CONVERT in de MSDN-help. Die worden "out of the box" gedefinieerd en ondersteund door SQL Server. Al het andere wordt niet ondersteund, b.v. je moet veel handmatig casten en aaneenschakelen (niet aanbevolen).

Het formaat dat u zoekt lijkt een beetje op de ODBC canonieke (stijl =121):

DECLARE @today DATETIME = SYSDATETIME()

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

geeft:

2011-11-14 10:29:00.470

SQL Server 2012 heeft eindelijk een FORMAT functie om aangepaste opmaak te doen......



  1. Een overzicht van pgModeler voor PostgreSQL

  2. SQL Server-prestaties TOP CPU-query -1

  3. De MyRocks Storage Engine gebruiken met MariaDB Server

  4. Zoeken naar volledige woordovereenkomst in MySQL