繁体   English   中英

将字符串转换为十进制

[英]Convert string number to decimal

我有几列实际上是数字的字符串格式,但其中有些是空的。 如何将它们转换为文本-我遇到了错误。

这是我的示例:

Select  
         MES_MACHINE 
        ,[TubeJobNo]
        ,LEFT (Customer_Name, 25) AS Customer
        ,Sales_Order_Line_No AS OrderNo
        ,[AFL_O2MES_SO_DJ].[Child_Job_Number]       
        ,CAST(Setup AS decimal) --- that worked
        ,ISNULL(FORMAT([FinalDataOp Completion],'N0'),'') 
        AS FinalDataOpCompletion --- that does not work, how do you convet this?
        ,ISNULL(FORMAT([JobFinishedWIP Issue Fiber Set]*FibersCount,'N0'),'') 
        AS TotalLengthConsumed

样本数据:

5,675
5,666
5,674
5,663
5,557
5,543
5,675
5,662

这是错误:

消息8114,级别16,状态5,第18行将数据类型nvarchar转换为数值时出错

这是由于数字中的千位分隔符。 您可能想要做的是首先更新列。

update table
set [FinalDataOp Completion]=replace([FinalDataOp Completion],',','')

然后再次运行查询。

由于您的电话号码包含逗号,因此出现错误,您首先需要替换逗号,然后再将其转换为整数。 参见下面的示例。

这会起作用

select cast(replace('5,675', ',', '') as int)

当您得到时,这将给出错误-

select cast('5,675' as int)

注意:还可以使用IsNumeric()SQL函数在转换之前检查字符串是否为数字。

我创建了#tem表取决于您的数据

create table #tem (setup nvarchar(20))
insert into #tem values('5,675'),
('5,666'),
('5,674'),
('5,663'),
('5,557'),
('5,543'),
('5,675'),
('5,662')

SELECT convert(decimal(15,4), REPLACE(setup, ',', '.')) from #tem

其实答案是

 SELECT convert(decimal(15,4), REPLACE(yourcolumname, ',', '.')) from yourtable

希望能帮助到你。

谢谢大家。 我最终使用了TRY_Convert函数。 这里是有兴趣的人的代码示例:

,TRY_CONVERT (int,[StagingDB].[dbo].[AFL_O2MES_TubeJob].Primary_Qty) As [TargetLength] ,ISNULL(TRY_CONVERT (int, [FinalDataOp Completion]),'') AS FinalDataOpCompletion ,ISNULL(TRY_CONVERT (int,[JobFinishedWIP Issue Fiber Set]*Count),'') AS TotalLengthConsumed

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM