Преобразовать экспоненциальный формат Excel обратно в его текст в SQL Server 2008 R2 - PullRequest
0 голосов
/ 17 января 2020

Во-первых, у меня есть ограничение: мое решение должно работать с SQL Server 2008 R2

Проблема, которую я пытаюсь решить, заключается в том, что Excel преобразует текстовое значение '002E9' до 2.00E + 09. Задача состоит в том, чтобы передать исходное значение '002E9' как текст в файл CSV.

Я получил решение SSIS от разработчик, который имеет преобразование в виде функции SQL. Они использовали

SELECT FORMAT(CAST(2.00E+09 AS FLOAT),'0E0');

Это нормально в 2012 году и выше, но не работает в SQL Server 2008 R2.

Есть ли простая альтернатива? Я рад отказаться от SQL для сценария SSIS, если это лучший совет.

Ответы [ 2 ]

0 голосов
/ 17 января 2020

Основываясь на посте, сделанном Ларну, я пришел к этому ( обратите внимание на функцию REPLICATE для получения правильного формата из урезанной строки ):

DECLARE @INPUTS AS table 
(input_val varchar(100))

INSERT INTO @INPUTS
VALUES
('00923'),('00234'),('00568'),('00123'),('2.00E+09' ),('2.00E+34' ),('00RT1'),('001TL')

SELECT input_val 
,REPLACE(REPLACE(REPLACE(input_val,'+',''),'0',''),'.','') paired_value
,REPLICATE('0',5-LEN(REPLACE(REPLACE(REPLACE(input_val,'+',''),'0',''),'.','')))
    +REPLACE(REPLACE(REPLACE(input_val,'+',''),'0',''),'.','')+';' Converted_value
FROM @INPUTS

Результаты:

+-----------+--------------+-----------------+
| input_val | paired_value | Converted_value |
+-----------+--------------+-----------------+
| 00923     | 923          | 00923;          |
| 00234     | 234          | 00234;          |
| 00568     | 568          | 00568;          |
| 00123     | 123          | 00123;          |
| 2.00E+09  | 2E9          | 002E9;          |
| 2.00E+34  | 2E34         | 02E34;          |
| 00RT1     | RT1          | 00RT1;          |
| 001TL     | 1TL          | 001TL;          |
+-----------+--------------+-----------------+

Подтверждает подход. Спасибо Ларну.

0 голосов
/ 17 января 2020

FORMAT не существует в SQL Server 2008; но лучше избегать его использования; это очень медленная функция.

Вы можете использовать CONVERT и стиль 0, хотя:

SELECT REPLACE(CONVERT(varchar(10),CAST(2.00E+09 AS float),0),'+','');

Это, однако, не даст точно такой же формат, и будет возврат '2e009'. Основываясь на том факте, что вы используете значение '0E0' для функции FORMAT, хотя (которое будет возвращать '2E9' для вашего примера), я предполагаю, что это допустимо.

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