sql >> Databasteknik >  >> RDS >> Sqlserver

Att utelämna millisekunderna i ett datum

Använd DATETIME2 , en ny datatyp i SQL Server 2008 som stöder fraktionerad precision:

SELECT
  CONVERT(DATETIME2(0),SYSDATETIME()) [yyyy-mm-dd hh:mm:ss]
, CONVERT(DATETIME2(1),SYSDATETIME()) [yyyy-mm-dd hh:mm:ss.f]
, CONVERT(DATETIME2(2),SYSDATETIME()) [yyyy-mm-dd hh:mm:ss.ff]
, CONVERT(DATETIME2(3),SYSDATETIME()) [yyyy-mm-dd hh:mm:ss.fff]
, CONVERT(DATETIME2(4),SYSDATETIME()) [yyyy-mm-dd hh:mm:ss.ffff]
, CONVERT(DATETIME2(5),SYSDATETIME()) [yyyy-mm-dd hh:mm:ss.fffff]
, CONVERT(DATETIME2(6),SYSDATETIME()) [yyyy-mm-dd hh:mm:ss.ffffff]
, CONVERT(DATETIME2(7),SYSDATETIME()) [yyyy-mm-dd hh:mm:ss.fffffff]

Omvandlingen avrundas till närmaste enhet, t.ex.:

2014-09-04 09:35:47.0162993 as DATETIME2(4) -> 
2014-09-04 09:35:47.0163

Alternativt på SQL 2005 och tidigare:

SELECT
  original  = GETDATE()
, [floor]   = DATEADD(ms,-DATEPART(ms,GETDATE()),GETDATE())
, [ceiling] = DATEADD(ms,1000-DATEPART(ms,GETDATE()),GETDATE())
, [rounded] = DATEADD(ms,CASE WHEN DATEPART(ms,GETDATE()) < 500 THEN 0 ELSE 1000 END-DATEPART(ms,GETDATE()),GETDATE())

Detta är lite snabbare än att konvertera till och från en strängrepresentation.



  1. Data fylls i från en viss tabells datum istället för alla tabeller i sqlite

  2. Få områden med förbättringar i PostgreSQL 9.4

  3. bearbetning av ett stort antal databasposter med personsökning saktar ner med tiden

  4. Hur man väljer kolumnvärde som kolumnnamn med villkor i SQL-tabell