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, '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:
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ę:
CREATE FUNCTION dbo.PadLeft(@num int, @len int, @char char) RETURNS varchar(32) AS
BEGIN
RETURN REPLACE(STR(@num, @len), ' ', @char)
END
GO
--Wywołanie funkcji
SELECT dbo.PadLeft(12,10,'0')
Kategoria:SQL Server
Brak komentarzy - bądź pierwszy