【问题标题】:Convert Excel Exponential Format back to its text in SQL Server 2008 R2在 SQL Server 2008 R2 中将 Excel 指数格式转换回其文本
【发布时间】:2020-01-17 09:12:16
【问题描述】:

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

【问题讨论】:

标签: sql-server sql-server-2008-r2


【解决方案1】:

FORMAT 在 SQL Server 2008 中不存在;但最好避免使用它;这是一个非常缓慢的功能。

您可以使用CONVERT 和样式0

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

但是,这不会给出完全相同的格式,并且会返回 '2e009'。基于您将值 '0E0' 用于 FORMAT 函数这一事实(这将返回 '2E9' 作为您的示例值),我认为这是允许的。

【讨论】:

  • 没有任何变化,输出与指数输入相同。
  • 什么意思,没有任何变化?
  • 查询的输出是 - 2e009。它应该在转换后的数字中。
  • 是的,答案就是这样,@SurajKumar "并且会返回 '2e009'";这就是OP所追求的; “任务是将原始值 '002E9' 作为文本传递到 CSV 文件中。”
  • 知道了,我在想输出应该是正常的数字,比如 200000..
【解决方案2】:

根据 Larnu 发布的帖子,我得出了这个结论(请注意 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;          |
+-----------+--------------+-----------------+

确认方法。 谢谢拉努。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-08
    • 2013-12-05
    • 1970-01-01
    相关资源
    最近更新 更多