W porównaniu do powiedzenia:
REPLICATE(@padchar, @len - LEN(@str)) + @str
sql
sql-server
tsql
Cade Roux
źródło
źródło
Odpowiedzi:
Jest to po prostu nieefektywne użycie SQL, bez względu na to, jak to robisz.
może coś takiego
gdzie X jest znakiem dopełniania, a @n jest liczbą znaków w wynikowym ciągu (zakładając, że potrzebujesz dopełnienia, ponieważ masz do czynienia ze stałą długością).
Ale jak powiedziałem, naprawdę powinieneś unikać robienia tego w swojej bazie danych.
źródło
RTRIM(@str)
jeśli może zawierać końcowe spacje.Wiem, że pierwotnie o to pytano w 2008 r., Ale w SQL Server 2012 wprowadzono kilka nowych funkcji. Funkcja FORMAT ładnie upraszcza wypełnianie zer zerami. Przeprowadzi również konwersję dla Ciebie:
Aktualizacja:
Chciałem sam przetestować rzeczywistą wydajność funkcji FORMAT. Byłem dość zaskoczony, gdy stwierdziłem, że wydajność nie była bardzo dobra w porównaniu z pierwotną odpowiedzią AlexCuse . Chociaż uważam, że funkcja FORMAT jest czystsza, nie jest ona zbyt wydajna pod względem czasu wykonania. Użyta przeze mnie tabela Tally ma 64 000 rekordów. Wyrazy uznania dla Martina Smitha za wskazanie wydajności czasu wykonania.
Czasy wykonania programu SQL Server: czas procesora = 2157 ms, czas, który upłynął = 2696 ms.
Czasy wykonania programu SQL Server:
źródło
Kilka osób podało wersje tego:
bądź ostrożny, ponieważ spowoduje to obcięcie twoich danych, jeśli jest on dłuższy niż n.
źródło
źródło
Być może nadmierne zabójstwo mam te UDF-y, które można przewrócić w lewo i w prawo
i na prawo
źródło
Nie jestem pewien, czy podana metoda jest naprawdę nieefektywna, ale będzie to alternatywny sposób, o ile nie musi ona być elastyczna pod względem długości lub znaku dopełniania (zakładając, że chcesz ją uzupełnić za pomocą „ 0 "do 10 znaków:
źródło
prawdopodobnie przesada, często używam tego UDF:
Abyś mógł robić takie rzeczy jak:
źródło
Podobało mi się rozwiązanie vnRocks, tutaj jest w formie udf
źródło
jest to prosty sposób na wstawienie lewej strony:
Gdzie
x
jest numer pada iy
znak pada.próba:
źródło
1
stają001
.źródło
W SQL Server 2005 i nowszych wersjach można utworzyć funkcję CLR, aby to zrobić.
źródło
Co powiesz na to:
3 to liczba
zeros
padźródło
Mam nadzieję, że to komuś pomoże.
źródło
Używam tego. Pozwala określić długość, która ma być wynikiem, a także domyślny znak dopełniający, jeśli nie zostanie podany. Oczywiście możesz dostosować długość danych wejściowych i wyjściowych dla dowolnych maksymalnych poziomów.
Twój przebieg może się różnić. :-)
Joey Morgan
programista / główny analityk I
WellPoint Medicaid Business Unit
źródło
Oto moje rozwiązanie, które pozwala uniknąć skróconych ciągów znaków i używa zwykłego ol 'SQL. Dzięki @AlexCuse , @Kevin i @Sklivvz , których rozwiązania są podstawą tego kodu.
źródło
Wiem, że w tej chwili nie ma to większego znaczenia w rozmowie, ale uruchamiam procedurę generowania plików, która idzie niesamowicie wolno. Użyłem replikacji i widziałem tę metodę przycinania i pomyślałem, że dam jej szansę.
W moim kodzie widać, że przełączanie między nimi jest dodatkiem do nowej zmiennej @padding (i istniejącego ograniczenia). Uruchomiłem procedurę z funkcją w obu stanach z tymi samymi wynikami w czasie wykonania. Tak więc przynajmniej w SQLServer2016 nie widzę żadnej różnicy w wydajności, którą inni stwierdzili.
Tak czy inaczej, oto mój UDF, który napisałem lata temu, oraz dzisiejsze zmiany, które są w dużej mierze takie same jak inne, oprócz tego, że ma opcję LEWEGO / PRAWEGO parametru i sprawdzanie błędów.
źródło
Mam jedną funkcję, która lpad z dziesiętnymi x: UTWÓRZ FUNKCJĘ [dbo]. [LPAD_DEC] (- Dodaj parametry funkcji tutaj @pad nvarchar (MAX), @string nvarchar (MAX), @length int, @dec int ) ZWRACA nvarchar (max) AS BEGIN - Deklaruj tutaj zmienną zwrotną DEKLARUJ @resp nvarchar (max)
KONIEC
źródło
Aby podać wartości liczbowe zaokrąglone do dwóch miejsc po przecinku, ale w razie potrzeby uzupełnione zerami, mam:
Byłoby to mile widziane, jeśli ktoś mógłby wymyślić lepszy sposób - powyższe wydaje się niezdarne .
Uwaga : w tym przypadku używam programu SQL Server do wysyłania raportów pocztą e-mail w formacie HTML, dlatego chcę sformatować informacje bez udziału dodatkowego narzędzia do analizy danych.
źródło
Oto jak normalnie bym wypełnił varchara
źródło