Професионална програма
Loading...
+ Нов въпрос
onefen avatar onefen 27 Точки

[Homework] Built-in Function Problem 15. Show All Games With Duration and Part of Day

Здравейте,

Някой може ли да ми каже къде бъркам в решението си на задачата:

http://pastebin.com/BT4TB7Ew

Part of the day винаги ми е или Morning или NULL

пробвах вместо с BETWEEN с > <  >= и тн.

но пак е така.

ако оставя последната клауза да е ELSE нямам NULL-ове но ми дава грешни резултати в Judge

Сигурно нещо в тази конверсия не е като хората но не знам точно кое

0
Databases Basics
StaVykoV avatar StaVykoV 169 Точки

Проблема ти е в тези проверки:

 WHEN (DATEPART(HOUR, G.Start)) BETWEEN CONVERT(datetime, '00:00:00.000')

        AND CONVERT(datetime, '11:59:59.999') THEN 'Morning'

Ти взимаш часа от датата ( което е число ) и го сравняваш с някаква дата. Няма ли да е по - лесно директно да сравняваш с число? Например да е между 0 и 11 включително (часа) ?
Виж как преправих кода ти и мина в джъджа :

SELECT G.Name,
    CASE
        WHEN (DATEPART(HOUR, G.Start)) BETWEEN 0 AND 11 THEN 'Morning'
        WHEN (DATEPART(HOUR, G.Start)) BETWEEN 12 AND 17 THEN 'Afternoon'
        WHEN (DATEPART(HOUR, G.Start)) BETWEEN 18 AND 23 THEN 'Evening'
    END AS [Part of Day],
    CASE
        WHEN G.Duration <= 3 THEN 'Extra Short'
        WHEN G.Duration BETWEEN 4 AND 6 THEN 'Short'
        WHEN G.Duration IS NULL THEN 'Extra Long'
        ELSE 'Long'
    END AS [Duration]
FROM Games AS G
ORDER BY G.Name ASC,
    [Duration],
    [Part of Day]

2