Переформатирование значений для удаления знаков доллара и запятых в SQL-сервере - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь удалить знаки доллара и запятые в одном столбце в моей таблице. Прямо сейчас значения приводятся как varchar, и я хочу изменить его на float. Некоторые примеры значений: «$ 5000», «- $ 5000», «$ -» и последнее значение необходимо изменить на 0.

Я пытался писать операторы замены, но не знал, как сохранить отрицательные значения. Есть идеи?

Ответы [ 2 ]

0 голосов
/ 11 октября 2019

В SQL Server 2012 + будет работать следующее:

DECLARE @Amount AS VARCHAR(100)

SET @Amount = '$5,000'

SELECT
  TRY_PARSE(REPLACE(@Amount, '$', '') AS NUMERIC(10,2))

Знаки доллара удаляются с помощью функции замены. TRY_PARSE () принимает запятые и возвращает ноль, если есть другие ошибочные символы.

NUMERIC предпочтительнее FLOAT для значений валют. Подробнее о различиях между типами см. Здесь: Разница между числовым, плавающим и десятичным в SQL Server

0 голосов
/ 11 октября 2019

Предполагая, что вы используете хотя бы SQL Server 2012, вы можете использовать TRY_PARSE()

SELECT 
TRY_PARSE('-$5,000' AS MONEY), 
TRY_PARSE('$5,000' AS MONEY)

'$-' не будет анализироваться правильно, потому что это нонсенс. Сделайте замену этому, и вы должны быть хороши:

SELECT 
CASE 
  WHEN val = '$-' THEN 0 
  ELSE TRY_PARSE(val AS MONEY) 
  END AS formatted_money
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...