Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Добавете водещи и последващи нули в SQL Server

Някои СУБД имат LPAD() и RPAD() функция, която може да се използва за добавяне на числа с начални и крайни нули.

SQL Server няма такава функция. Но това не ни пречи да можем да допълваме числата с водещи/завършващи нули.

Нецели числа

Първо, нека разгледаме нецели числа:

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

Резултат:

<пред>+--------+-------+-------+| 1 | 2 | 3 ||-------+-------+-------|| 007.00 | 017.00 | 073,50 |+--------+-------+-------+

Тук използваме FORMAT() функция за форматиране на числото. Първият аргумент е числото, а вторият аргумент е низът за форматиране. Функцията извежда резултата си като форматиран низ.

В горния пример низът за формат се състои от персонализирани спецификатори на цифров формат, което води до оригиналното число с добавени нули на местата, където няма цифра в оригиналното число. Можем да използваме толкова нули във форматния низ, колкото са ни необходими.

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

Резултат:

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

Цели числа

Ако първоначалното число е цяло число, тогава трябва да свършим малко повече работа:

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"; 

Резултат:

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

Тук използвах REPLACE() функция за премахване на десетичната запетая, след като числото е форматирано с нея.

Изрично използвах en-US като (по избор) трети аргумент, за да се гарантира, че десетичният разделител е точка/точка, а не друг знак, като запетая. Някои локали използват запетая като десетичен разделител. Ако не посочим изрично локала от функцията, тогава се използва локалът на текущата сесия. Изричното указване на локала от функцията гарантира, че локалът на текущата сесия не се използва и следователно не е в състояние да попречи на нашата операция за замяна.

Azure SQL Edge

Azure SQL Edge е изграден върху ограничена реализация на SQL Server Database Engine и следователно поддържа повечето от функциите на T-SQL, които можем да използваме със SQL Server. Въпреки това, към момента на писане, SQL Edge не поддържа T-SQL FORMAT() функция.

Вижте Как да добавите водещи и крайни нули в Azure SQL Edge за алтернативен метод (който работи и в 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. Магазинът за заявки на SQL Server

  2. Трябва ли да се декларира скаларна променлива @Id?

  3. Как да вмъкнете прекъсване на ред в низ VARCHAR/NVARCHAR на SQL Server

  4. Вмъкнете всички стойности на таблица в друга таблица в SQL

  5. Ключова дума не се поддържа:метаданни