Goran Bibic Ответов: 2

Выберите день недели MS SQL?


У меня есть приложение для рабочего времени работников...

Мне нужно если это суббота или воскресенье работать с моим кодом

Без
CASE WHEN WEEKDAY(a.vrijemeodjave) in (1,7) then 0 else 


КОД РАБОТАЕТ НОРМАЛЬНО

Оператор Microsoft SQL 2016

Что я уже пробовал:

SELECT a.id, a.redni_broj , a.radnik, isnull(convert(varchar(20), a.vrijemeodjave, 113), '') as vrijemeodjave, convert(varchar(20), b.vrijemeprijave, 113) as vrijemeprijave, 
CASE WHEN WEEKDAY(b.vrijemeprijave) in (1,7) then 0 else (CASE WHEN (DATEDIFF(SECOND, b.vrijemeprijave, a.vrijemeodjave) / 3600) > 8 THEN 8 ELSE(DATEDIFF(SECOND, b.vrijemeprijave, a.vrijemeodjave) / 3600) END) end    AS radni_sati, 
CASE WHEN WEEKDAY(a.vrijemeodjave) in (1,7) then 0 else (CASE WHEN(DATEDIFF(SECOND, b.vrijemeprijave, a.vrijemeodjave) / 3600) > 8  THEN(DATEDIFF(SECOND, b.vrijemeprijave, a.vrijemeodjave) / 3600) - 8  ELSE NULL END) end    AS prekovremeni 
FROM(SELECT id, redni_broj, radnik, vrijemeodjave, ROW_Number() OVER(Partition By id ORDER BY vrijemeprijave) as RowNum 
FROM dbo.prijava_radnika) a INNER JOIN(SELECT id, redni_broj, radnik, vrijemeprijave, (ROW_Number() OVER(Partition By id ORDER BY vrijemeprijave) - 1) as RowNumMinusOne FROM dbo.prijava_radnika) b ON a.id = b.id where 1 = 1 

Goran Bibic

1 - воскресенье, 7-суббота...Я надеюсь, что это так..

2 Ответов

Рейтинг:
20

Wendelius

Не уверен, правильно ли я понял вопрос, но вы можете использовать DATEPART для вычитания номера дня недели.

Например

SELECT DATEPART(weekday, GETDATE())


Goran Bibic

Мне нужно найти субботу и воскресенье

Wendelius

Это значение зависит от установленного вами параметра DATEFIRST. Вы можете запросить его следующим образом:

ВЫБЕРИТЕ @@DATEFIRST

В зависимости от возвращаемого значения суббота и воскресенье являются различными значениями, как описано в разделе DATEPART (Transact-SQL) | Microsoft Docs[^]

Например, у меня есть дата начала как 7, а на этой неделе суббота и воскресенье для меня равны 7 и 1 соответственно.

Goran Bibic

Его работа...спасибо...Я принимаю ответ

Wendelius

Пожалуйста :)

Рейтинг:
10

RickZeeland

В дополнение к ответу 1, возможно, это сделает вещи более ясными:

SELECT
  DATENAME(weekday, a.vrijemeodjave),
  DATEPART(weekday, a.vrijemeodjave)
FROM dbo.prijava_radnika

Также смотрите SQL Fiddle здесь: Скрипка SQL[^]


Goran Bibic

Спасибо