Spis treści:

Kategoria:SQL Server


Uzupełnianie numeru zerami lub spacjami z lewej strony

PadLeft w wersji SQL Server

Tym razem rozpatrzę pewien, chyba dość powszechny, problem. Przypomnijmy sobie, jak działa funkcja PadLeft znana z technologii .NET.

"23".PadLeft(5); //wynik = "   23"
"23".PadLeft(5, '0'); //wynik = "00023"

W .NET istnieją dwie przeciążone metody. Jedna z nich uzupełnia wartość spacjami, druga natomiast podanym w parametrze znakiem. Naszym zadaniem będzie napisanie odpowiednika w SQL Server.

Kilka technik uzupełniania

Ten sam problem można rozwiązać na kilka sposobów. Przyjrzyjmy się im. Zaprezentowane są one na poniższym listingu:

--Skorzystanie z efektów funkcji STR
DECLARE @num int = 12
SELECT REPLACE(STR(@num, 6), ' ''0')

GO

--Przycięcie wzorca pustego tekstu z lewej strony
DECLARE @num int = 12
SELECT RIGHT('000000'CAST(@num AS varchar), 6)

GO

--Technika stosowana dla tekstów
--Liczbę należy wcześniej zamienić na tekst
DECLARE @num int = 12
DECLARE @col varchar(100) = CAST(@num AS varchar)
SELECT REPLICATE('0', 6-LEN(@col))+@col

Myślę, że techniki nie wymagają szczegółowych wyjaśnień. Każda z nich uzupełnia liczbę 12 zerami z przodu w taki sposób, aby całość mogła być wypisana jako '000012&spos;. Ilość cyfr jest stała, i wynosi 6. Spróbujmy teraz udoskonalić te krótkie skrypty i zamknąć je w funkcjach wzorowanych na ich odpowiednikach (PadLeft) z .NET Framework.

Skrypty w postaci funkcji

Jeżeli metoda będzie używana częściej niż kilka razy, warto stworzyć sobie uniwersalną funkcję. Przyjrzyjmy się, w jaki sposób można przerobić pierwszą metodę na odpowiednią funkcję:

--Stworzenie uniwersalnej funkcji
CREATE FUNCTION dbo.PadLeft(@num int, @len int, @char charRETURNS varchar(32) AS
BEGIN
RETURN REPLACE(STR(@num, @len), ' ', @char)
END

GO

--Wywołanie funkcji
SELECT dbo.PadLeft(12,10,'0')

Kategoria:SQL Server

, 2013-12-20

Brak komentarzy - bądź pierwszy

Dodaj komentarz
Wyślij
Ostatnie komentarze
Kalkulator, jak kalkulator, na pewno nie uwzględnia wielu rzeczy. Dla przykładu, jedziemy po asfalcie, ja na rowerze trial (14 kg, opony 29x2,6) a obok mnie kolega na szosie. Robimy te same kilometry w tym samym czasie i niby tyle samo wysiłku włożyliśmy? Druga kwestia, idę na owym rowerze pojeździć po lesie, podjazd, zjazd, piasek etc. To nie to samo co jazda po ścieżce.
Całkiem niezły kalkulator, porównując rezultaty z suunto 9 baro wartości są niemal identyczne z tymże byłoby jeszcze lepiej gdyby dodać prędkość wiatru i przewyższenia. Zdecydowanie najlepszy kalkulator w necie.
Super wyjasnione, czytalo sie bardzo lekko. Dzieki i pozdrawiam
puściłem benta i leci klockiem w pomieszczeniu, w którym kodujemy