Ошибка преобразования строки JSON в десятичную - PullRequest
0 голосов
/ 05 июля 2018

Этот вопрос может отвечать во многих темах, но я не могу найти ответ, относящийся к моей проблеме.

В: Я получаю данные из API (в формате json), где все столбцы поступают в виде строки и вставляются в таблицу, в которой все столбцы представлены в виде строки и служат исходной таблицей.

Теперь я пытаюсь привести данные из этого источника к месту назначения и выполняю все необходимые преобразования, чтобы вставить данные в таблицу назначения. Но десятичное (16,8) приведение не удалось.

Я отладил проблему на своем конце и обнаружил, что во время выборки данных из API, который возвращает данные в формат json, преобразуются значения в некоторый необычный формат.

Например, 0.00007 преобразование в 7E-05, и это происходит для многих других строк.

Я знаю, что могу решить эту проблему на уровне реализации API. Но я попросил решить это в конце SQL-сервера. Поэтому мне нужно решение, которое должно конвертировать 7E-05 в 0,00007.

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Этот необычный формат является довольно обычной научной записью Википедия, прочитайте раздел "Электронная запись"

Вы видите E и число, означающее экспонента .

"1E2"  = 1 * 10^2 = 100
"1E-2" = 1 * 10^(-2) = 0.01

Попробуйте это:

DECLARE @tbl TABLE(Numberstring VARCHAR(100));
INSERT INTO @tbl VALUES('100'),('1E2'),('1E-2'),('7E-05');
SELECT Numberstring
      ,CAST(Numberstring AS FLOAT) 
      ,CAST(CAST(Numberstring AS FLOAT) AS DECIMAL(20,10)) 
FROM @tbl;

Результат

100     100     100.0000000000
1E2     100     100.0000000000
1E-2    0,01    0.0100000000
7E-05   7E-05   0.0000700000

Вы можете видеть, что сам тип FLOAT будет отображать последний в научной нотации, а приведение к DECIMAL вернет ожидаемое число.

Я был бы счастлив с повышением, но вы должны принять ответ Шона, как он был раньше, чем мой: -D

0 голосов
/ 05 июля 2018

Попробуйте что-то вроде:

SELECT CAST(CAST(@t AS FLOAT) AS DECIMAL(16,8))

Результат:

0.00007000

CAST до FLOAT, затем до DECIMAL.

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