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

Dodaj wiodące i końcowe zera w SQL Server

Niektóre DBMS mają funkcję LPAD() i RPAD() funkcja, która może być używana do uzupełniania liczb zerami wiodącymi i końcowymi.

SQL Server nie ma takiej funkcji. Ale to nie przeszkadza nam w uzupełnianiu liczb zerami wiodącymi/końcowymi.

Liczby niecałkowite

Najpierw spójrzmy na liczby niecałkowite:

SELECT 
    FORMAT(7, '000.00') AS "1",
    FORMAT(17, '000.00') AS "2",
    FORMAT(73.5, '000.00') AS "3";

Wynik:

+--------+--------+--------+
| 1      | 2      | 3      |
|--------+--------+--------|
| 007.00 | 017.00 | 073.50 |
+--------+--------+--------+

Tutaj używamy FORMAT() funkcja formatowania liczby. Pierwszym argumentem jest liczba, a drugim ciąg formatujący. Funkcja wyprowadza swój wynik jako sformatowany ciąg.

W powyższym przykładzie ciąg formatu składa się z niestandardowych specyfikatorów formatu liczbowego, które powodują, że oryginalna liczba ma dodane zera w miejscach, w których nie ma cyfry w oryginalnej liczbie. Możemy użyć tylu zer w ciągu formatu, ile potrzebujemy.

SELECT 
    FORMAT(7, '00000.0000') AS "1",
    FORMAT(17, '00000.0000') AS "2",
    FORMAT(73.5, '00000.0000') AS "3";

Wynik:

+------------+------------+------------+
| 1          | 2          | 3          |
|------------+------------+------------|
| 00007.0000 | 00017.0000 | 00073.5000 |
+------------+------------+------------+

Liczby całkowite

Jeśli oryginalna liczba jest liczbą całkowitą, musimy wykonać trochę więcej pracy:

SELECT 
    REPLACE(FORMAT(7, '00000.0000', 'en-US'), '.', '') AS "1",
    REPLACE(FORMAT(17, '00000.0000', 'en-US'), '.', '') AS "2",
    REPLACE(FORMAT(73.5, '00000.0000', 'en-US'), '.', '') AS "3";

Wynik:

+-----------+-----------+-----------+
| 1         | 2         | 3         |
|-----------+-----------+-----------|
| 000070000 | 000170000 | 000735000 |
+-----------+-----------+-----------+

Tutaj użyłem REPLACE() funkcja usuwania kropki dziesiętnej po sformatowaniu liczby.

Ja jawnie użyłem en-US jako (opcjonalny) trzeci argument, aby zapewnić, że separatorem dziesiętnym jest kropka/kropka, a nie inny znak, taki jak przecinek. Niektóre ustawienia regionalne używają przecinka jako separatora dziesiętnego. Jeśli nie określimy wprost lokalizacji z poziomu funkcji, używane są ustawienia regionalne bieżącej sesji. Jawne określenie ustawień regionalnych z poziomu funkcji zapewnia, że ​​ustawienia regionalne bieżącej sesji nie są używane, a zatem nie mogą zakłócać naszej operacji zastępowania.

Azure SQL Edge

Azure SQL Edge opiera się na ograniczonej implementacji aparatu bazy danych SQL Server i dlatego obsługuje większość funkcji T-SQL, których możemy używać z SQL Server. Jednak w momencie pisania tego tekstu, SQL Edge nie obsługuje T-SQL FORMAT() funkcja.

Zobacz Jak dodać wiodące i końcowe zera w Azure SQL Edge, aby zapoznać się z alternatywną metodą (która działa również w SQL Server).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Visual Studio:ContextSwitchDeadlock

  2. Błąd potwierdzenia uzgadniania uzgadniania przed logowaniem w programie SQL Server

  3. Jaki jest najdłuższy możliwy numer telefonu na świecie, który powinienem wziąć pod uwagę w SQL varchar (długość) dla telefonu?

  4. Sparametryzowane zapytanie oczekuje parametru, którego nie podano

  5. IDENT_CURRENT vs @@IDENTITY vs SCOPE_IDENTITY w SQL Server:jaka jest różnica?