Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Lewe dopełnienie w SQL Server – 3 równoważniki LPAD()

Jeśli używasz Oracle Database lub MySQL, masz szczęście, że masz LPAD() i RPAD() funkcje, które pozwalają na dopełnienie napisu danym znakiem (lub znakami) z lewej i/lub z prawej strony.

Jednak SQL Server (a dokładniej T-SQL) nie zawiera tych funkcji. Więc jeśli potrzebujesz trochę lewego wypełnienia, musisz improwizować.

W tym artykule przedstawiono cztery opcje dopełniania liczby zerami wiodącymi w programie SQL Server. Możesz więc robić takie rzeczy jak zakręt 7 w 007 . Trzy z tych opcji działają na ciągach, więc możesz również zastosować dopełnienie do danych tekstowych.

Metoda 1 – Użyj funkcji FORMAT()

Jeśli chcesz zastosować wiodące zera do liczby, ta opcja powinna wystarczyć. Ta opcja używa FORMAT() funkcjonować. Ta funkcja zwraca liczbę jako ciąg znaków w naszym określonym formacie:

SELECT FORMAT(7, '000');

Wynik:

007

W tym przypadku używamy 0 specyfikator formatu, aby sformatować liczbę z zerami wiodącymi, jeśli ma to zastosowanie. To tylko jeden z wielu niestandardowych specyfikatorów formatu. Specyfikatory formatu niestandardowego pozwalają nam bardzo precyzyjnie określić, w jaki sposób jest sformatowany nasz numer.

Zauważ, że FORMAT() funkcja jest tylko dla liczb i wartości daty i godziny. Więc jeśli chcesz zastosować dopełnienie do rzeczywistego ciągu, czytaj dalej.

Metoda 2 – Użyj funkcji PRAWO()

Druga metoda wykorzystuje RIGHT() funkcja zwracająca tylko prawą część ciągu, po dodaniu kilku wiodących zer.

Chociaż stosuję tutaj wiodące zera do „liczby”, w rzeczywistości jest to reprezentacja liczby w postaci ciągu. Więc jeśli musisz zastosować dopełnienie do łańcucha zamiast liczby, ta metoda powinna zadziałać.

SELECT RIGHT('000' + '1234', 7);

Wynik:

0001234

7 określa, ile znaków powinien mieć wynik końcowy (po dodaniu zer).

Zmniejszanie długości

Więc jeśli zmniejszymy tę liczbę, zmniejszy się liczba wiodących zer:

SELECT RIGHT('000' + '1234', 6);

Wynik:

001234

Zwiększanie długości

Ale jeśli zwiększymy liczbę, musimy upewnić się, że podaliśmy wystarczającą liczbę zer, aby uzyskać wymaganą długość:

SELECT RIGHT('000000' + '1234', 10);

Wynik:

0000001234

W przeciwnym razie skończymy z tym:

SELECT RIGHT('000' + '1234', 10);

Wynik:

0001234

Skrócenie liczby

Pamiętaj też, że jeśli nie określisz wystarczającej liczby znaków dla długości wynikowego ciągu, liczba zostanie odcięta, a otrzymasz tylko prawą część liczby:

SELECT RIGHT('000' + '1234', 2);

Wynik:

34

Więc w tym przypadku początkowa liczba została obcięta, a wiodące zera zostały zignorowane.

Jest to jeden ze scenariuszy, w których wynik różni się od wyników MySQL i Oracle LPAD() funkcjonować. Ta funkcja wytworzyłaby pierwsze 2 (niewypełnione) cyfry zamiast ostatnich 2 cyfr. Tak:

SELECT LPAD(1234, 2, 0);

Wynik:

12

Jeśli potrzebujesz rozwiązania SQL Server, które będzie zachowywać się jak LPAD() w takich przypadkach wypróbuj to:

SELECT RIGHT(REPLICATE('0', 3) + LEFT('1234', 2), 2);

Wynik:

12

Pamiętaj jednak, że ten sam wynik uzyskasz po prostu za pomocą LEFT() funkcja sama:

SELECT LEFT('1234', 2);

Wynik:

12

Poza tym staram się wymyślić powód, dla którego ktokolwiek chciałby skrócić liczbę (biorąc pod uwagę, że próbuje ją uzupełnić), ale przynajmniej jest to coś do rozważenia.

Metoda 3 – Użyj kombinacji RIGHT() i REPLICATE()

Ta metoda jest prawie taka sama jak poprzednia, z tą różnicą, że po prostu zamieniam trzy zera na REPLICATE() funkcja:

SELECT RIGHT(REPLICATE('0', 3) + '1234', 7);

Wynik:

0001234

REPLICATE() Funkcja pozwala uniknąć wielokrotnego wpisywania każdego zera (lub innego znaku).

Metoda bonusowa:Metoda 4 – Użyj kombinacji REPLACE() i STR()

Ta metoda pochodzi z zupełnie innego punktu widzenia niż poprzednie metody:

SELECT REPLACE(STR('1234', 6),' ','0');

Wynik:

001234

Tutaj używamy REPLACE() funkcja w połączeniu z STR() funkcja konwertująca liczbę na łańcuch o określonej długości, a następnie konwertująca dowolne znaki spacji na zero.

Jedną rzeczą, na którą należy uważać, jest to, że jeśli skrócisz liczbę (tak jak zrobiliśmy to w poprzednim przykładzie), otrzymasz kilka gwiazdek zamiast (skróconej) liczby:

SELECT REPLACE(STR('1234', 2),' ','0');

Wynik:

**

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. @@IDENTITY, SCOPE_IDENTITY(), OUTPUT i inne metody odzyskiwania ostatniej tożsamości

  2. Jak uciec przed znakiem procentu w T-SQL?

  3. Jak uzyskać ostatnio wstawiony identyfikator?

  4. Wprowadzenie do tabel tymczasowych w SQL Server

  5. Jak mogę wywołać procedurę składowaną SQL przy użyciu EntityFramework 7 i Asp.Net 5?