ПРЕОБРАЗОВАНИЕ ДАННЫХ VARCHAR В ЧИСЛО - PullRequest
0 голосов
/ 12 марта 2019

Пример данных:

12.12%,
6,
1,
10%,
8.347%,
16.27

код

SELECT CONVERT(decimal(10,3), [Discount]) AS [Discount]
FROM [RDMS_DEV].[dbo].[t_TNSDiscount_dtl]

Ошибка:

Ошибка преобразования типа данных varchar в числовой.

Ожидаемые результаты:

12.12%,
6%,
1%,
10%,
8.347%,
16.27%

Ответы [ 2 ]

2 голосов
/ 12 марта 2019

Попробуйте: вам нужно удалить «%» из значения скидки.

DECLARE @tbl TABLE
(
    Id INT ,
    Discount VARCHAR(10)
)

INSERT INTO @tbl(Id, Discount)VALUES(1, '12.12%')
INSERT INTO @tbl(Id, Discount)VALUES(1, '6')
INSERT INTO @tbl(Id, Discount)VALUES(1, '1')
INSERT INTO @tbl(Id, Discount)VALUES(1, '10%')
INSERT INTO @tbl(Id, Discount)VALUES(1, '8.347%')
INSERT INTO @tbl(Id, Discount)VALUES(1, '16.27')


SELECT CONVERT(decimal(10,3), REPLACE([Discount],'%','')) AS [Discount] FROM @tbl
1 голос
/ 12 марта 2019

Проблема в ваших данных, потому что, имея для решения символ «%», удалите их с помощью функции замены.

SELECT CONVERT(varchar(255),REPLACE([Discount], '%', '')) + '%' AS [Discount] 
FROM [RDMS_DEV].[dbo].[t_TNSDiscount_dtl]

Вы также можете добавить CONVERT (десятичное число (10,3), [Скидка]), чтобы ввести 3 десятичных знака.

Новый ответ при изменении вопроса: поэтому для обновления каждый раз, когда данные больше и равны 10, я объединяю символ «%».

SELECT CASE WHEN CONVERT(decimal,REPLACE([Discount], '%', '')) <  10 THEN CONVERT(varchar(255),REPLACE([Discount], '%', '')) ELSE
CONVERT(varchar(255),REPLACE([Discount], '%', ''))   + '%' END AS [Discount] 
FROM [RDMS_DEV].[dbo].[t_TNSDiscount_dtl]

Результат вывода для обновленного вопроса:

enter image description here

...