此查询正常
select * from
(select meas.Inspection_No, case
when ISNUMERIC(meas.InspectionValue) = 1 then
cast(meas.InspectionValue as decimal(10,2))
else 0 End as IVEKVol, meas.InspectionValue, spec.Name, spec. [Description], meas.LastDate, meas.ID from
(select ism.InspectionSpecificationMeasurementID, ism.Name, ism. [Description] from PT_InspectionSpecification [is]
inner join PT_InspectionSpecification_Measurement ism on [is].InspectionSpecification_No = ism.InspectionSpecification_No
where [is].PartDescription = 'Anode Dispense' and [is].InspectionSpecification_type = 'Control Plan' and ism.Name LIKE 'I-IVEKVol Recorded%') spec
inner join
PT_InspectionItem_Measurement meas on spec.InspectionSpecificationMeasurementID = meas.InspectionSpecificationMeasurementID) data
但是当我添加where子句"其中data.IVEKVol> 0"我收到错误"将数据类型nvarchar转换为数字"
时出错select * from
(select meas.Inspection_No, case
when ISNUMERIC(meas.InspectionValue) = 1 then
cast(meas.InspectionValue as decimal(10,2))
else 0 End as IVEKVol, meas.InspectionValue, spec.Name, spec. [Description], meas.LastDate, meas.ID from
(select ism.InspectionSpecificationMeasurementID, ism.Name, ism. [Description] from PT_InspectionSpecification [is]
inner join PT_InspectionSpecification_Measurement ism on [is].InspectionSpecification_No = ism.InspectionSpecification_No
where [is].PartDescription = 'Anode Dispense' and [is].InspectionSpecification_type = 'Control Plan' and ism.Name LIKE 'I-IVEKVol Recorded%') spec
inner join
PT_InspectionItem_Measurement meas on spec.InspectionSpecificationMeasurementID = meas.InspectionSpecificationMeasurementID) data
where data.IVEKVol > 0
答案 0 :(得分:0)
由于data.IVEKVol
列为NVARCHAR
类型,0
为numberic
类型
要比较两列,DBMS必须将两列类型转换为相同的类型。
如果data.IVEKVol
列的数据类似:'1','22',...'',您可以尝试:
WHERE CAST(data.IVEKVol AS INT) > 0 -- Can FOAT, DOUBLE, NUMBERIC, ... instead
如果没有,我认为您的代码如下:
WHERE data.IVEKVol > N'0' -- recommend
-- OR
WHERE data.IVEKVol > '0' -- not recommend