Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在SQL Server 2008 R2中将Excel指数格式转换回其文本_Sql Server_Sql Server 2008 R2 - Fatal编程技术网

Sql server 在SQL Server 2008 R2中将Excel指数格式转换回其文本

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中不起作用 有没有一个简单的选择?

首先,我有一个限制,我的解决方案必须在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脚本。

格式在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;          |
+-----------+--------------+-----------------+