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

Ляво подреждане в SQL Server – 3 еквивалента на LPAD().

Ако използвате Oracle Database или MySQL, имате достатъчно късмет да имате LPAD() и RPAD() функции, които ви позволяват да допълвате низ с даден знак (или знаци) отляво и/или отдясно.

Въпреки това, SQL Server (или по-точно T-SQL) не включва тези функции. Така че, ако имате нужда от лява подплата, ще трябва да импровизирате.

Тази статия представя четири опции за допълване на число с водещи нули в SQL Server. Така че можете да правите неща като завой 7 в 007 . Три от тези опции работят върху низове, така че можете също да приложите допълване към текстови данни.

Метод 1 – Използвайте функцията FORMAT()

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

SELECT FORMAT(7, '000');

Резултат:

007

В този случай използваме 0 спецификатор на формат за форматиране на числото с водещи нули, където е приложимо. Това е само един от многото спецификатори на персонализиран формат. Персонализираните спецификатори на формат ни позволяват да бъдем много точни за това как е форматиран номерът ни.

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

Метод 2 – Използвайте функцията RIGHT()

Вторият метод използва RIGHT() функция за връщане само на най-дясната част от низа, след добавяне на някои водещи нули.

Въпреки че прилагам водещи нули към „число“ тук, това всъщност е низово представяне на число. Така че, ако трябва да приложите допълване към низ вместо число, тогава този метод трябва да работи.

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

Резултат:

0001234

7 указва колко знака трябва да бъде крайният резултат (след добавяне на нулите).

Намаляване на дължината

Така че, ако намалим това число, това ще намали броя на водещите нули:

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

Резултат:

001234

Увеличаване на дължината

Но ако увеличим числото, трябва да се уверим, че сме посочили достатъчно нули, за да получим необходимата дължина:

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

Резултат:

0000001234

В противен случай ще стигнем до това:

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

Резултат:

0001234

Прекъсване на номера

Също така имайте предвид, че ако не посочите достатъчно знаци за получената дължина на низа, числото ще бъде отрязано и ще получите само най-дясната част от числото:

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

Резултат:

34

Така че в този случай първоначалното число беше съкратено плюс водещите нули бяха игнорирани.

Това е един сценарий, при който резултатът се различава от този на MySQL и LPAD() на Oracle функция. Тази функция би произвела първите 2 (неподплатени) цифри вместо последните 2 цифри. Като това:

SELECT LPAD(1234, 2, 0);

Резултат:

12

Ако имате нужда от решение на SQL Server, което ще се държи като LPAD() в такива случаи опитайте това:

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

Резултат:

12

Въпреки това, имайте предвид, че получавате същия резултат, просто като използвате LEFT() функция самостоятелно:

SELECT LEFT('1234', 2);

Резултат:

12

Освен това се мъча да измисля причина, поради която някой иска да съкрати номера (като се има предвид, че се опитва да го напълни), но поне това е нещо, което трябва да се вземе предвид.

Метод 3 – Използвайте комбинация от RIGHT() и REPLICATE()

Този метод е почти същият като предишния, с единствената разлика, че просто замествам трите нули с REPLICATE() функция:

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

Резултат:

0001234

REPLICATE() функцията ви спестява от необходимостта да въвеждате всяка нула (или друг знак) няколко пъти.

Бонус метод:Метод 4 – Използвайте комбинация от REPLACE() и STR()

Този метод идва от напълно различен ъгъл от предишните методи:

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

Резултат:

001234

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

Едно нещо, за което трябва да внимавате е, че ако съкратите числото (както направихме в предишен пример), ще получите куп звездички вместо (съкратеното) число:

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

Резултат:

**

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Автоматично изтриване на забравени транзакции в MS SQL Server

  2. Филтриране по опции OFFSET-FETCH в заявка за избор - SQL Server / TSQL урок, част 118

  3. Намерете индекса на последното появяване на подниз с помощта на T-SQL

  4. Изчисляване на броя на пълните месеци между две дати в SQL

  5. Трябва ли MAMP да върне ::1 като IP на localhost?