Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Пропускане на милисекунди в дата

Използвайте DATETIME2 , нов тип данни в SQL Server 2008, който поддържа дробна точност:

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]

Преобразуването ще се закръгли до най-близката единица, напр.:

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

Алтернативно, на SQL 2005 и eariler:

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())

Това е малко по-бързо от преобразуването към и от низово представяне.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Разберете защо имейл не успя да се изпрати в SQL Server (T-SQL)

  2. Какъв тип данни трябва да се използва за съхраняване на телефонни номера в SQL Server 2005?

  3. SQL заявка за получаване на обобщен резултат в разделители на запетая заедно с група по колона в SQL Server

  4. CHARINDEX() срещу PATINDEX() в SQL Server – Каква е разликата?

  5. Не може да се премахне схемата, защото тя не съществува или нямате разрешение. - SQL Server / TSQL урок, част 29