Професионална програма
Loading...
stambi4a avatar stambi4a 126 Точки

[Homework] Databases Basics - Built In Functions - Problem 12. Games from 2011 and 2012

Колеги, ако някой има проблем с конкретната задача, едно малко упътване от мен. Оказва се, че няма значение как си кръщавате колоните.В тази задача даже е препоръчително да не кръстите Start пак Start след използването на FORMAT.

Хубав ден на всички.

EDIT: оказва се, че при използване на alias на таблицата и реферирането му при order by, може новото име на Start пак да е Start.

Тагове:
4
Databases Basics 30/09/2016 20:53:47
Irrrka avatar Irrrka 19 Точки

Добре, де. Къде бъркам в моето решение? Смених и с Format, и с 'S' - еднакви резултати...

SELECT TOP 50 G.Name as 'Game', CAST(G.Start AS DATE) AS 'Start'
FROM GAMES AS G
WHERE YEAR(G.START) IN (2011, 2012)
ORDER BY 2, 1

 

Благодаря предварително.

0
stambi4a avatar stambi4a 126 Точки

Здравей.

Използвай FORMAT(Start, 'yyyy-MM-dd') as 'Start' вместо каста.

А също така Order By 2,1 подрежда по aliasa 'Start', не по G.Start, което орязва датите преди да ги сортира. Използвай Order By G.Start, G.Name.

Така работи.

1
01/10/2016 01:02:35
Irrrka avatar Irrrka 19 Точки

Да, сработи. Пак благодаря. И за обясненията. А с CAST не работи, защото има тук-там и интервали за заигравка :)

0
stambi4a avatar stambi4a 126 Точки

Абсолютно никакъв проблем.

Аз използвам кастове само при INSERT.

Успех.

0
GallinaSt avatar GallinaSt 2 Точки

В MSSQL има огромно значение как си налисал FORMAT(Start, 'yyyy-MM-dd') , а именнто - пробвайте с 'YYYY-ММ-dd', 'yyyy-mm-DD', 'YYYY-mm-DD' .. ще видите какви чудесии излизат :) И реално това, което е цитирано в условието като формат 'YYYY-MM-DD', не минава в judge, нито извежда читав форматинг.  Що се отнася до това дали ще сортираш по алайас Start или по g.Start - не би ли следвало да няма разлика, тъй като реално ние променяме само формАта на самите данни, но не ги орязваме? 

1
stambi4a avatar stambi4a 126 Точки

По отношение на сортирането ако пуснеш това query

SELECT Start  FROM Games
WHERE FORMAT(g.Start, 'yyyy-MM-dd') = CAST('2011-11-09' AS DATE)

и после това

SELECT Start FROM Games
WHERE Start = '2011-11-09'

можеш да видиш, че има разлики. FORMAT към дата е все едно да се взема само date частта от datetime променливата. Използвайки FORMAT с alias 'Start', каквото е името на променливата явно прави нещо като override на променливата. Понеже физически SELECT се изпълнява преди ORDER BY, първо става override-a и след това сортирането. Ако искаш да сортираш по неформатираната променлива я реферираш чрез alias-а на таблицата.

 'yyyy-MM-dd' e валиден формат и то защото mm се използва за минути. Други валидни формати

 

1
Cemish avatar Cemish 16 Точки

SELECT TOP(50) [Name], FORMAT(Start, 'yyyy-MM-dd') AS [Start]
FROM Games
WHERE YEAR(Games.Start) IN(2011,2012)
ORDER BY [Start],[Name]

 

Според мен вместо 'Start' трябв ада е [Start] и [Game].

0