Форматирование чисел на SQL сервере - PullRequest
0 голосов
/ 29 апреля 2020

У меня следующая последовательность чисел

id
----
1
2
3
4
5

Мне нужны значения идентификатора в формате ниже

10
100
1000
10000
100000

Это означает, что на основе значений столбца идентификатора я хочу одинаковое количество нулей с правой стороны.

Ответы [ 5 ]

1 голос
/ 29 апреля 2020

Попробуйте следующий запрос, используя функцию REPLICATE().

Select id
   , '1' + REPLICATE('0', id)
from Data

enter image description here Live db <> fiddle demo.

1 голос
/ 29 апреля 2020

Можем ли мы сделать?

with tb(cl) as(
    select 1 union all
    select 2 union all
    select 3 union all
    select 4 union all
    select 5  
)
select 
    cast ( SUBSTRING('10000000000',1, cl+1) as int) as id
from tb
1 голос
/ 29 апреля 2020

Попробуйте использовать POWER():

SELECT
    id,
    POWER(id, 10) AS output
FROM yourTable
ORDER BY id;

Обратите внимание, что для значений id больше, чем около 20, полученное значение показателя степени даже не поместится в большой столбец типа int .

1 голос
/ 29 апреля 2020
DECLARE @T TABLE (ID INT)

INSERT INTO @T VALUES(1)
INSERT INTO @T VALUES(2)
INSERT INTO @T VALUES(3)
INSERT INTO @T VALUES(4)
INSERT INTO @T VALUES(5)


SELECT *,CONCAT(1,REPLICATE(0,ID)) AS SEQ
FROM @T
1 голос
/ 29 апреля 2020

Одним из возможных подходов является следующий оператор, использующий REPLICATE() для повторения символа 0:

Таблица:

CREATE TABLE Data (id int)
INSERT INTO Data (id) VALUES (1), (2), (3), (4), (5)

Оператор

SELECT CONCAT('1', REPLICATE('0', id)) AS id
FROM Data

Результат :

id
10
100
1000
10000
100000

Примечания:

Использование CONCAT(), чтобы избежать null, приводит к выводу, если в столбце ìd есть значения null. Если это не важно, '1' + REPLICATE('0', id) также является опцией.

Если вы хотите, чтобы результаты имели вид цифра c тип данных (int, bigint, smallint, tinyint, цифра c), вам нужно преобразовать результаты, но учтите диапазон для каждого типа данных, чтобы избежать ошибки arithmetic overflow.

SELECT CONVERT(int, CONCAT('1', REPLICATE('0', id))) AS id
FROM Data
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...