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

Как мога да съкратя дата и час в SQL Server?

Това продължава често да събира допълнителни гласове, дори няколко години по-късно, и затова трябва да го актуализирам за съвременни версии на Sql Server. За Sql Server 2008 и по-нови версии е просто:

cast(getDate() As Date)

Имайте предвид, че последните три абзаца в долната част все още се прилагат и често трябва да направите крачка назад и да намерите начин да избегнете на първо място.

Но има и други начини да постигнете това. Ето най-често срещаните.

Правилният начин (нов от Sql Server 2008):

cast(getdate() As Date)

Правилният начин (стар):

dateadd(dd, datediff(dd,0, getDate()), 0)

Това вече е по-старо, но все пак си струва да се знае, защото може лесно да се адаптира и към други времеви точки, като първия момент от месеца, минута, час или година.

Този правилен начин използва документирани функции, които са част от стандарта ansi и гарантирано ще работят, но може да бъде малко по-бавен. Работи, като намира колко дни има от ден 0 до текущия ден и добавя тези дни обратно към ден 0. Ще работи независимо как се съхранява датата и часът и без значение какъв е локалът ви.

Бързият начин:

cast(floor(cast(getdate() as float)) as datetime)

Това работи, защото колоните за дата и час се съхраняват като 8-байтови двоични стойности. Прехвърлете ги така, че да плават, подземете ги, за да премахнете фракцията, а частта от стойностите от време е изчезнала, когато ги върнете обратно към дата и час. Всичко е просто малко изместено без сложна логика и е много бърз.

Имайте предвид, че това разчита на подробности за внедряването, които Microsoft може свободно да променя по всяко време, дори при автоматична актуализация на услугата. Освен това не е много преносим. На практика е много малко вероятно тази реализация да се промени скоро, но все пак е важно да сте наясно с опасността, ако решите да я използвате. И сега, когато имаме опцията да играем като дата, рядко се налага.

Грешен начин:

cast(convert(char(11), getdate(), 113) as datetime)

Грешният начин работи чрез преобразуване в низ, отрязване на низа и преобразуване обратно в дата и час. Това е грешно , поради две причини:1) може да не работи във всички локали и 2) става дума за най-бавния възможен начин да направите това... и не само малко; това е като порядък или два по-бавно от другите опции.

Актуализиране Това получи някои гласове напоследък и затова искам да добавя към него, че откакто публикувах това, видях някои доста солидни доказателства, че Sql Server ще оптимизира разликата в производителността между "правилния" и "бързия" начин, което означава, че сега трябва да предпочитате първото.

И в двата случая искате да напишете вашите заявки, за да избегнете необходимостта да правите това на първо място . Много рядко трябва да извършвате тази работа с базата данни.

На повечето места базата данни вече е вашето тесно място. По принцип сървърът е най-скъпият за добавяне на хардуер за подобряване на производителността и най-трудният за правилното прилагане на тези допълнения (трябва да балансирате дисковете с паметта, например). Освен това е най-трудно да се мащабира навън, както технически, така и от бизнес гледна точка; технически е много по-лесно да добавите уеб или сървър на приложения, отколкото сървър на база данни и дори това да е невярно, вие не плащате $20 000+ за сървърен лиценз за IIS или apache.

Опитвам се да кажа, че когато е възможно, трябва да вършите тази работа на ниво приложение. Единственият моментът, в който някога трябва да откриете, че съкращавате дата и час на Sql Server, е когато трябва да групирате по ден и дори тогава вероятно трябва да имате допълнителна колона, настроена като изчислена колона, поддържана по време на вмъкване/актуализация или поддържана в приложението логика. Извадете тази разбиваща индексите, натоварваща процесора работа от вашата база данни.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Какво е значението на SELECT ... FOR XML PATH(' ),1,1)?

  2. Ключове на SQL сървъра – Други ключове, за които трябва да знаете

  3. Предайте речник<string,int> към T-SQL за съхранявана процедура

  4. Влезте в Microsoft SQL Server Грешка:18456

  5. Как да вмъкнете блоб в база данни с помощта на sql сървърно студио за управление