我使用的是Microsoft SQL Server 2008 R2。
我们应该支持在工作中支持的数据库,并且所有实际值都存储为varchar
,长篇大论背后的所有。
由于我们使用报告软件,我们的数字需要转换为十进制。 SQL Server似乎无法将科学记数法转换为十进制
EX:6.54E-6
我尝试搜索所有值,例如'%e%'希望找到它们然后我可以手动将它们全部转换为正常数字格式...但是这不起作用。
有没有办法可以进行大规模转换?或者至少搜索包含E ??的所有值。
我试过搜索E而我找不到值<给定的数字..因为它们存储为varchar
。
任何想法都会非常感激,我可能会在几个小时内看不到这一点(我再也不会再工作12个小时了,所以如果我不立即回应那个也就是为什么)。非常感谢先进的解决方案将为我节省数小时的搜索时间。
答案 0 :(得分:0)
您应该只能将值转换为float:
select (case when isnumeric(val) = 1 then cast(val as float) end)
from t;
具有讽刺意味的是,在大多数情况下isnumeric()
的一个弱点是它承认科学记数法。在这里,这是一个优势。
在SQL Server 2012+中,您可以使用try_convert()
:
select try_convert(float, val)
from t;