sql – 在视图中转换科学记数法(来自varchar – gt;数字)
由于我无法帮助的原因,我有一个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而不指定任何其他内容. 这是一个完全解决所有问题的解决方案: 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)) (编辑:南京站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |