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

Вземете определен делничен ден в рамките на седмица, даден от DATETIME

Със стойностите за дата и час трябва да сте много внимателни! Особено индексът на ден е труден. Винаги трябва да мислите за специфичните за културата различия:

--The first of January was a Friday in 2016
DECLARE @testDate DATE = {d'2016-01-01'};

--Опитвам това с немската култура, това започва от понеделник

SET LANGUAGE GERMAN;
SELECT @@DATEFIRST,DATEPART(WEEKDAY,@testDate); --in Germany the Friday was 5th day

--Сега същото с английската култура, започвайки от неделя

SET LANGUAGE ENGLISH;
SELECT @@DATEFIRST,DATEPART(WEEKDAY,@testDate); --in English culture this is the 6th day

--Можете да направите тази култура независима, като добавите тези стойности с Modulo 7

SET LANGUAGE GERMAN;
SELECT (@@DATEFIRST + DATEPART(WEEKDAY,@testDate)) % 7; --in Germany the Friday was 5th day

SET LANGUAGE ENGLISH;
SELECT (@@DATEFIRST + DATEPART(WEEKDAY,@testDate)) % 7; --in English culture this is the 6th day

Сега и двете заявки връщат една и съща стойност за петък, 6 .

Вашият пример показва неделята като първи ден от седмицата, така че неделята от седмицата до дадения ден трябва да бъде всъщност 17 юли. Вашият очакван резултат (24 юли) е първият ден на следващата седмица, нали?

Опитайте това:

DECLARE @DayOfWeek TINYINT = 1;
DECLARE @Date DATETIME = '2016-07-21 23:47:11.133';
SELECT CAST(@Date + @DayOfWeek - (@@DATEFIRST + DATEPART(WEEKDAY,@Date)) % 7 AS DATE)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sp_MSForEachDB Невалидно използване на оператор със страничен ефект във функция

  2. SQL Server дял на таблица на Tenant ID - използвано дисково пространство

  3. Как да конвертирате nvarchar в десетичен в SQL

  4. Как да намеря всички съхранени процедури, които вмъкват, актуализират или изтриват записи?

  5. Намиране на следващия ред в SQL заявката и изтриването му само ако предходният ред съвпада