Sql server 在SQL Server 2008 R2中将Excel指数格式转换回其文本
首先,我有一个限制,我的解决方案必须在SQL Server 2008 R2上运行 我试图解决的问题是Excel将文本值“002E9”转换为2.00E+09。任务是将原始值'002E9'作为文本传递到CSV文件中 一位开发人员向我传递了一个SSIS解决方案,该解决方案将转换作为SQL函数。他们使用了Sql server 在SQL Server 2008 R2中将Excel指数格式转换回其文本,sql-server,sql-server-2008-r2,Sql Server,Sql Server 2008 R2,首先,我有一个限制,我的解决方案必须在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中不起作用 有没有一个简单的选择?
SELECT FORMAT(CAST(2.00E+09 AS FLOAT),'0E0');
这在2012年及更高版本中可以,但在SQL Server 2008 R2中不起作用
有没有一个简单的选择?如果这是最好的建议的话,我很乐意放弃SQL而使用SSIS脚本。
格式在SQL Server 2008中不存在;但无论如何,最好避免使用它;这是一个非常慢的函数
您可以使用CONVERT
和样式0
,但:
SELECT REPLACE(CONVERT(varchar(10),CAST(2.00E+09 AS float),0),'+','');
但是,这不会给出完全相同的格式,并且会返回'2e009'
。基于您将值'0E0'
用于FORMAT
函数的事实(该函数将返回'2E9'
作为示例值),我假设这是允许的。基于我得出的post-Larnu(注意复制函数用于从精简字符串中获取正确格式):
结果是:
+-----------+--------------+-----------------+
| 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; |
+-----------+--------------+-----------------+
确认了这一方法。
谢谢Larnu。这能回答您的问题吗?没有任何变化,并且给出与指数输入相同的输出。什么意思,没有变化?查询的输出是-2e009。它应该在转换后返回的数字中。是的,答案是这样的,@SurajKumar“并将返回'2e009'
”;这就是OP所追求的;“任务是将原始值'002E9'作为文本传递到CSV文件中。”明白了,我想输出应该是正常的数字,比如200000。。
+-----------+--------------+-----------------+
| 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; |
+-----------+--------------+-----------------+