Форматирование строки до 2 десятичных знаков? - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть номер, который выглядит так:

'0000040000'

Как я могу превратить его в строку, которая выглядит следующим образом:

400.00

Это должно работать и с такими числами:

1234540067 -> 12345400.67

Ответы [ 6 ]

2 голосов
/ 15 апреля 2019

Я подозреваю, что будет справедливо сказать, что у вас есть строка, которую вы хотели бы отформатировать как число.

Если вы хотите «научиться» делать это, я предлагаю поискать функции convert, cast и format для SQL Server и получить дополнительные знания.

Я решил сначала преобразовать в числовой тип, разделить на 100 и отформатировать вывод. Это избавляет от необходимости обрезать начальные нули.

select format(convert(numeric(18,2), '0000040001') / 100, '0.00'))

1 голос
/ 15 апреля 2019

Следующее выражение SQL сначала изменит строку на десятичную, а затем преобразует ее обратно в строку в требуемом формате:

SELECT FORMAT(CAST ('0000040000' AS DECIMAL(12,2))/100,'#.00')

0 голосов
/ 15 апреля 2019

Просто, как это:

SELECT ROUND('0000040004', 2, 1)/100;

Протестировано это с SQL Server 2017. Его не волнует тот факт, что число является строкой, он отлично с ним справляется. Результат вышесказанного 400.04

0 голосов
/ 15 апреля 2019

Вот несколько возможных решений:

DECLARE @x CHAR(10)='0000040000'
SELECT CONVERT(VARCHAR(11),CONVERT(NUMERIC(10,2),CONVERT(NUMERIC(10),@x)/100))
SELECT CONVERT(VARCHAR(11),CONVERT(NUMERIC(10,2),STUFF(@x,9,0,'.')))
0 голосов
/ 15 апреля 2019

Это должно работать:

select convert(varchar(10), convert(decimal(10, 2), try_convert(int, '0000040000') / 100.0))

Почему вы хотите значение в виде строки? Работает ли десятичная дробь для ваших целей?

Другой метод:

select ltrim(str(try_convert(int, '0000040000') / 100.0, 10, 2))

Или используя только строковые манипуляции:

select replace(ltrim(replace(stuff('0000040000', 9, 0, '.'), '0', ' ')), ' ', '0')

Это было бы более элегантно, если бы ltrim() в SQL Server принял символ для обрезки (как позволяет большинство других баз данных).

0 голосов
/ 15 апреля 2019

Ваш запрос скорее математический.Чтобы получить последние 2 числа после десятичных знаков, получите остаток числа, разделив его на 100. Чтобы получить цифры, оставляя последние 2 цифры, разделите число на 100.

select convert(varchar,1234540067/100)+'.'+ convert(varchar,1234540067% 100);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...