Професионална програма
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 18 Точки

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
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.