我的查询
Select * from MyTable
该表包含30万行。 它可以运行200k +行,并且会弹出此错误。
如何处理以获得完整数据?
MyTable是否有任何计算列?
表由一个名为IsExceeds的计算列组成,下面提供以供参考。
这是计算得出的列公式:
(CONVERT([int],[Pro_PCT])-CONVERT([int],replace([Max_Off],'%','')))
字段定义:
[Pro_PCT] [nvarchar](50) NULL,
[Max_Off] [nvarchar](50) NULL,
[IsExceeds] AS (CONVERT([int],[Pro_PCT])-CONVERT([int],replace([Max_Off],'%','')))
答案 0 :(得分:1)
请先将其转换为float,然后再转换为int。
declare @n nvarchar(20)
set @n='11.11'
if (isnumeric(@n)=0)
SELECT 0
else
SELECT CAST(CONVERT(float, @n) as int) AS n
答案 1 :(得分:1)
为什么将金额存储为字符串?这是根本问题。
因此,我建议您修复数据。像这样:
update mytable
set max_off = replace(max_off, '%');
alter table mytable alter pro_pct numeric(10, 4);
alter table mytable alter max_off numeric(10, 4);
(没有示例数据或我只是在猜测合理类型的数据示例。)
然后,您可以将IsExceeds
定义为:
(Pro_PCT - Max_Off)
Voila!没问题。
答案 2 :(得分:0)
基于公式-Pro_PCT
或Max_Off
包含值11.11
(好吧,%
还有一个额外的Max_Off
。也许它们还包含不能转换为int
的其他值。
您可以在这里找到将导致此问题的所有行:
Select *
from MyTable
where try_cast(Pro_PCT as int) is null
or try_cast(replace([Max_Off],'%','') as int) is null
找到它们之后,可以固定值或更改计算列的计算以使用try_cast
或try_convert
而不是convert
。
答案 3 :(得分:0)
使用
检查错误数据select * from MyTable where isnumeric( Max_Off ) = 0