加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

sql – 在视图中转换科学记数法(来自varchar – gt;数字)

发布时间:2021-01-22 09:24:20 所属栏目:编程 来源:网络整理
导读:因为我无法辅佐的缘故起因,我有一个varchar列,其数据如下:820.0E-12,10.0E 00. 我想要数值.以是我有这个测试查询事变: declare @d varchar(256)set @d = '820.0E-12'select CASE WHEN @d like '%E-%' THEN LTRIM(RTRIM(CAST(CAST(@d AS FLOAT) AS DECIMAL(18,18

因为我无法辅佐的缘故起因,我有一个varchar列,其数据如下:820.0E-12,10.0E 00.

我想要数值.以是我有这个测试查询事变:

declare @d varchar(256)
set @d = '820.0E-12'
select 
   CASE 
      WHEN @d like '%E-%' THEN LTRIM(RTRIM(CAST(CAST(@d AS FLOAT) AS DECIMAL(18,18))))
      WHEN @d like '%E+%' THEN NULL
      ELSE @d
   END

我的功效是:0.000000000820000000(这就是我想要的)

我变动我的SQL以思量数字> 0(10.0E 00)像这样:

WHEN @d like '%E+%' THEN CAST(@d AS FLOAT)

我的功效变为:8.2E-10(这不是我想要的)

假如我改变@ d = ’10 .0E 00’那么我获得10(这是正确的).

我有一个视图,我必要从varchar列输出,包括科学记数法,锻造/转换为十进制(18,18).

有人能汇报我这里产生了什么猖獗吗?

可能,大概我的题目应该是,如安在视图中将varchar科学记数法列转换/转换为十进制输出?

我的第一个WHEN语句合用于数字< 0但我还必要思量数字> 0.当我变动第二个WHEN,包罗CAST时,它会间断/给堕落误的功效.

办理要领

同时在这里搜集了几个差异的题目.我们来看看个中一些:

>你将数字作为DECIMAL(18,18).这意味着“给我一个有18个字符的空间的数字,个中18个应该在十进制之后”.只要您的数字小于0(对付全部电子数字都是云云),它就可以正常事变但假如您实行在数字上行使它,它将会间断> 0.对付数字> 0,只是转换为DECIMAL而不指定任何其他内容.
>假如您添加“当@d像’%E%’那么CAST(@d AS FLOAT)”时,您会获得差异的数字功效< 0由于引擎以差异方法隐式地转换功效.我不知道有关sql server怎样抉择转换CASE功效的法则,但显然提出你的提议变动会导致引擎以差异的方法从头天生它.将这些功效显式地转换为十进制修复题目.
>你必要LTRIM和RTRIM同等的功效.您可觉得每个case语句添加LTRIM和RTRIM,也可以只为LTRIM和RTRIM添加案例功效.

这是一个完全办理全部题目的办理方案:

SELECT
    LTRIM(RTRIM(CASE 
        WHEN @d like '%E-%' THEN CAST(CAST(@d AS FLOAT) AS DECIMAL(18,18))
        WHEN @d like '%E+%' THEN CAST(CAST(@d AS FLOAT) AS DECIMAL)
        ELSE @d
    END))

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读