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

Най-добрият подход за премахване на времева част от дата и час в SQL Server

Строго, метод a е най-малко ресурсоемкият:

a) select DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)

Доказано по-малко процесорно интензивно за същата обща продължителност милион реда от някой с твърде много време в ръцете си:Най-ефективният начин в SQL Server за получаване на дата от дата+час?

Видях подобен тест и другаде с подобни резултати.

Предпочитам DATEADD/DATEDIFF, защото:

  • varchar е обект на проблеми с езика/формата на датата
    Пример:Защо моят CASE израз е недетерминиран?
  • float разчита на вътрешна памет
  • удължава се до тренировка на първия ден от месеца, утре и т.н. чрез промяна на базата "0"

Редактиране, октомври 2011 г.

За SQL Server 2008+ можете да CAST към date т.е. CAST(getdate() AS date) . Или просто използвайте date тип данни, така че няма time за премахване.

Редактиране, януари 2012 г.

Работен пример за това колко гъвкаво е това:Необходимо е да се изчисли по закръглена цифра за час или дата в sql сървър

Редактиране, май 2012 г.

Не използвайте това в клаузи WHERE и други подобни без да се замислите:добавянето на функция или CAST към колона обезсилва използването на индекс. Вижте номер 2 тук Често срещани грешки при програмиране на SQL

Сега това има пример за по-късни версии на оптимизатора на SQL Server, управляващи CAST до момента правилно, но по принцип ще е лоша идея...

Редактиране, септември 2018 г., за datetime2

DECLARE @datetime2value datetime2 = '02180912 11:45' --this is deliberately within datetime2, year 0218
DECLARE @datetime2epoch datetime2 = '19000101'

select DATEADD(dd, DATEDIFF(dd, @datetime2epoch, @datetime2value), @datetime2epoch)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Функция SUM() в SQL Server

  2. Как да премахнете ограничение в SQL Server (T-SQL)

  3. Защо получавам грешката Типът данни Xml не се поддържа в разпределените заявки при запитване към свързан сървър за не-xml данни?

  4. Как да получите отделни записи от таблица в SQL Server - SQL Server / TSQL Урок 112

  5. Изтриване на SQL Server – Премахване на един или повече редове от таблица с леко напреднали сценарии