我有几列为字符串格式,实际上是数字,但其中有些是空的。如何将它们转换为文本-我遇到了错误。
这是我的样品:
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转换为数字时出错
答案 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