Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 DATETIME  [new]
DmitryVT
Member

Откуда: VRN
Сообщений: 192
добрый день господа

Мне необходимо выделить смены сотрудников:
1я с 8:00 до 20:00 (в рамках текущего дня)
2я с 20:00 до 8:00 (следующего дня, но считается за предыдущий)

решил (на примере) следующим образом, но мне кажется что мой способ решения нерационален, возможно ли упростить его пугает большое наличие функции CONVERT

USE PRD1
CREATE TABLE #TEST (ID int, SMENA VARCHAR(20),DATE DATETIME)
----------------
INSERT INTO #TEST SELECT 1,'09.10  - 2я','2013-10-10 07:49:00.000'
INSERT INTO #TEST SELECT 2,'10.10  - 1я','2013-10-10 08:01:00.000'
INSERT INTO #TEST SELECT 3,'10.10  - 2я','2013-10-10 21:49:00.000'
INSERT INTO #TEST SELECT 4,'10.10  - 2я','2013-10-10 20:01:00.000'
INSERT INTO #TEST SELECT 5,'10.10  - 2я','2013-10-11 06:49:00.000'
INSERT INTO #TEST SELECT 6,'11.10  - 1я','2013-10-11 09:49:00.000'
INSERT INTO #TEST SELECT 7,'09.10  - 2я','2013-10-10 05:49:00.000'
INSERT INTO #TEST SELECT 8,'10.10  - 1я','2013-10-10 10:49:00.000'
-----------------
SELECT ID,SMENA,DATE, CAST(CONVERT(VARCHAR,DATEADD(HH,-8,DATE), 104) AS DATETIME) AS REDATE,
      (CASE WHEN  CONVERT(DATETIME,CONVERT(VARCHAR(8),DATEADD(HH,-8,DATE),108),114) < '1900-01-01 12:00:00.000'
                        THEN '1я смена' ELSE '2я смена' END)AS SMENA 

FROM #TEST

-----------------
DROP TABLE #TEST


Из примера в дальнейшем меня будут интересовать колонки REDATE и SMENA
29 окт 13, 09:39    [15044572]     Ответить | Цитировать Сообщить модератору
 Re: DATETIME  [new]
DmitryVT
Member

Откуда: VRN
Сообщений: 192
Сори забыл SQL SERVER 2005
29 окт 13, 09:48    [15044640]     Ответить | Цитировать Сообщить модератору
 Re: DATETIME  [new]
Гость333
Member

Откуда:
Сообщений: 3683
DmitryVT,

CASE WHEN DATEPART(hour, DATE) BETWEEN 8 AND 19 THEN '1я смена' ELSE '2я смена' END) AS SMENA

?
29 окт 13, 10:06    [15044811]     Ответить | Цитировать Сообщить модератору
 Re: DATETIME  [new]
Гость333
Member

Откуда:
Сообщений: 3683
DmitryVT
CAST(CONVERT(VARCHAR,DATEADD(HH,-8,DATE), 104) AS DATETIME) AS REDATE

В принципе нормально, но не будет работать, например, на английских языковых настройках. Вместо CAST надо бы сделать CONVERT в DATETIME с таким же форматом 104.
29 окт 13, 10:10    [15044864]     Ответить | Цитировать Сообщить модератору
 Re: DATETIME  [new]
DmitryVT
Member

Откуда: VRN
Сообщений: 192
ОК спасибо огромное, сейчас исправлю
29 окт 13, 10:13    [15044881]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить