将字符串数转换为十进制

时间:2019-02-27 05:31:02

标签: sql-server

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

这是我的样品:

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转换为数字时出错

4 个答案:

答案 0 :(得分:1)

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

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

然后再次运行查询。

答案 1 :(得分:0)

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

这将起作用

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

这将在您得到提示时给出错误-

select cast('5,675' as int)

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

答案 2 :(得分:0)

我根据您的数据创建了#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

希望有帮助。

答案 3 :(得分:0)

感谢大家。我最终使用了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