2015-02-05 3 views
-1

с помощью SQL Server, я следующее:Получить час от даты-времени и поставить «Дни» в поле

SELECT DATENAME(DW, DATEADD(DAY, 0, @mindate)) AS Day_of_Week , 
    @crewon AS Crew_On , 
    ISNULL(SUM((CONVERT(NUMERIC(8, 2), C.FinishLength)/2000)), 0) AS Finished_Tons , 
    ISNULL(SUM(CASE WHEN C.RepairCode LIKE '%A%' 
        THEN (CONVERT(NUMERIC(8, 2), C.FinishLength) 
         /2000) 
       END), 0) AS A_Tons 
FROM NYS2SawPieces C 
WHERE RIGHT(C.ShiftIdent, 1) = @crewon 
    AND C.ProdTime >= @mindate 
    AND C.ProdTime <= DATEADD(DAY, 1, @mindate) 

Мне нужно только «Часы» от ProdTime, которые из 06 в 18 и поставить " Дни "в колонке. Часами вне этого диапазона будут «Ночи».

Выход хотел бы этого, но добавить столбец для смены.

Day_of_Week Crew_On Finished_Tons A_Tons  Shift  
Sunday  A  0.000000  0.0000000 Days 
+1

Пожалуйста, отредактируйте ваш вопрос с данными примера и желаемыми результатами. –

+0

Я согласен с Gordon, однако DATEPART будет вашим решением, независимо от специфики. –

ответ

1

Используйте саз применять условную логику для определения выхода:

SELECT Col1, Col2, 
    CASE WHEN DATEPART(HOUR,C.ProdTime) BETWEEN 6 AND 18 THEN 'DAYS' 
     ELSE 'NIGHTS' 
    END AS Shift 
FROM.... 

Это будет выводить новый столбец с именем Shift, выводящий DAYS, если значение находится в пределах от 6 до 8, в противном случае он будет выводить NIGHTS ,

+0

Это выглядело наиболее перспективным, но когда я помещал его в список выбора, я получаю сообщение об ошибке: «Столбец NYS2SawPieces.ProdTime» недопустим в списке выбора, потому что он не содержится ни в агрегатной функции, ни в GROUP BY ". – Obfuscated

+0

Вы используете агрегирование сумм, но у вас нет группировки. При использовании суммы все столбцы в select либо нуждаются в совокупной функции, применяемой к ним (min, max, count, sum и т. Д.), Либо их необходимо сгруппировать. Не видя каких-либо фактических данных источника/выборки и желаемого результата, сложно консультироваться дальше. – Tanner

+0

Абсолютно правильно. Я объединил запросы в одном выражении Select. Когда я добавлял запрос «День/Ночь» в отдельный оператор Select, он отлично работал. Спасибо, ребята, за помощь. – Obfuscated

-1

Вы можете использовать WHERE и between команд SQL, чтобы помочь вам отфильтровать ваш запрос в час, что-то вдоль линий:

WHERE hour(your_datetime_field) between 6 and 18 

The WHERE действует как фильтр при выборе данных, которые возвращается в ваш запрос. Остальная часть заявления дает ограничения на часы, которые вы хотите your_datetime_field, чтобы быть между ними.

+0

Возможно, вы захотите включить в свой ответ объяснение, почему это поможет. Также вы должны прочитать [это] (http://sqlblog.com/blogs/aaron_bertrand/archive/2011/10/19/what-do-between-and-the-devil-have-in-common.aspx). – Zane

+0

Я прочитал этот пост, очень полезный, но не тот, который мне нужен. Мне нужно извлечь только час с отметки времени, чтобы я опубликовал сменную работу (Дни или ночи) для этой команды. В предложении Where я получаю команду от правильного символа смены и дня недели из ProdTime. – Obfuscated

Смежные вопросы