DECLARE @STRING AS VARCHAR(8000); SET @STRING = '123456789'; WITH CTE AS ( SELECT CAST(RIGHT(@STRING, 1) AS VARCHAR(8000)) AS REVERSE_STRING , DATALENGTH(@STRING) - 1 AS I UNION ALL SELECT REVERSE_STRING + RIGHT(LEFT(@STRING, I), 1) , I - 1 FROM CTE WHERE I > 0 ) SELECT REVERSE_STRING FROM CTE WHERE I = 0 OPTION(MAXRECURSION 8000);
wtorek, 23 listopada 2010
CTE i odwrócenie STRINGa
Dość często słyszę, że na rozmowach kwalifikacyjnych na stanowisko programisty dostaje się zadanie p.t. odwrócenie STRINGa. Oczywiście nie chodzi tu o użycie istniejącej funkcji, ale o napisanie swojej. I tu w ramach fascynacji CTE pomyślałem, że może zrobić to w T-SQL ale za pomocą pojedynczego zapytania. No i wyszło mi coś takiego :
GO LOOP
Prawie nigdy nie rozdzielam zapytań w SSMS słówkiem GO. Jakoś nie jest to mi do niczego potrzebne. Dziś jednak odkryłem, że GO mam fajną właściwość. Jako parametr przyjmuje ilość wywołań danej sekwencji zapytań. Np. coś takiego :
SELECT 'WYŚWIETL MNIE 5 RAZY' GO 5 SELECT 'A MNIE 3' GO 3... daje takie o to wyniki :
Do czego tego użyć ? Może proste wstawienie kliku testowych rekordów do tabeli, bez pisania np. pętli WHILE ?
poniedziałek, 22 listopada 2010
T-SQL CHALLENGES
Jeżeli chcielibyście zmierzyć swoje siły w zadaniach praktycznych z T-SQLa to zapraszam na stronki :
- dla początkujących : http://beyondrelational.com/blogs/tcb/default.aspx
- dla bardziej zaawansowanych : http://beyondrelational.com/tc/
Subskrybuj:
Posty (Atom)