将 Excel 指数格式转换回其在 SQL Server 2008 R2 中的文本
Convert Excel Exponential Format back to its text in SQL Server 2008 R2
首先我有一个限制,我的解决方案必须在 SQL Server 2008 R2
上运行
我要解决的问题是 Excel 将文本值 '002E9' 转换为 2.00E+09。任务是将原始值 '002E9' 作为 text 传递到 CSV 文件中。
开发人员向我提供了一个 SSIS 解决方案,该解决方案具有作为 SQL 函数的转换。他们用过
SELECT FORMAT(CAST(2.00E+09 AS FLOAT),'0E0');
这在 2012 及更高版本中没问题,但在 SQL Server 2008 R2 中不起作用。
有没有简单的替代方案?如果这是最好的建议,我很乐意放弃 SQL 而改用 SSIS 脚本。
FORMAT
在 SQL Server 2008 中不存在;但无论如何最好避免使用它;这是一个非常慢的函数。
不过您可以使用 CONVERT
和样式 0
:
SELECT REPLACE(CONVERT(varchar(10),CAST(2.00E+09 AS float),0),'+','');
但是,这不会给出完全相同的格式,return '2e009'
。基于您为 FORMAT
函数使用值 '0E0'
的事实(您的示例值将 return '2E9'
),我认为这是允许的。
基于 Larnu 提出的 post 我得出了这个(请注意用于从精简字符串中获取正确格式的 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; |
+-----------+--------------+-----------------+
确认方法。
谢谢拉努。
首先我有一个限制,我的解决方案必须在 SQL Server 2008 R2
上运行我要解决的问题是 Excel 将文本值 '002E9' 转换为 2.00E+09。任务是将原始值 '002E9' 作为 text 传递到 CSV 文件中。
开发人员向我提供了一个 SSIS 解决方案,该解决方案具有作为 SQL 函数的转换。他们用过
SELECT FORMAT(CAST(2.00E+09 AS FLOAT),'0E0');
这在 2012 及更高版本中没问题,但在 SQL Server 2008 R2 中不起作用。
有没有简单的替代方案?如果这是最好的建议,我很乐意放弃 SQL 而改用 SSIS 脚本。
FORMAT
在 SQL Server 2008 中不存在;但无论如何最好避免使用它;这是一个非常慢的函数。
不过您可以使用 CONVERT
和样式 0
:
SELECT REPLACE(CONVERT(varchar(10),CAST(2.00E+09 AS float),0),'+','');
但是,这不会给出完全相同的格式,return '2e009'
。基于您为 FORMAT
函数使用值 '0E0'
的事实(您的示例值将 return '2E9'
),我认为这是允许的。
基于 Larnu 提出的 post 我得出了这个(请注意用于从精简字符串中获取正确格式的 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; |
+-----------+--------------+-----------------+
确认方法。 谢谢拉努。