SQL ISNUMERIC 返回奇数结果
SQL ISNUMERIC is returning odd results
所以我有这个查询:
SELECT
*
FROM
(SELECT * FROM PE_ProductInstance WHERE ISNUMERIC(SerialStart) = 1) p
where
CAST(SerialStart AS int) < 8174
理论上,子查询应该过滤掉列 SerialStart
不是数字的任何结果。事实上,当我查看以下结果时:
SELECT * FROM PE_ProductInstance WHERE ISNUMERIC(SerialStart) = 1
第 SerialStart
列的所有结果确实都是数字。所以我不明白为什么该查询会导致此错误:
Conversion failed when converting the nvarchar value '8A0357' to data type int.
还有什么奇怪的是这个查询returns没什么:
SELECT
*
FROM
(SELECT * FROM PE_ProductInstance WHERE ISNUMERIC(SerialStart) = 1) p
where
SerialStart = '8A0357'
我做错了什么?
Try_Cast 是正确的方法。请参阅此代码:
DECLARE @table TABLE(
id int identity(1,1),
name varchar(100));
INSERT into @table
VALUES
('1111'),('8A0357');
SELECT *
FROM @table p
WHERE TRY_CAST(p.Name AS int) < 8174;
所以我有这个查询:
SELECT
*
FROM
(SELECT * FROM PE_ProductInstance WHERE ISNUMERIC(SerialStart) = 1) p
where
CAST(SerialStart AS int) < 8174
理论上,子查询应该过滤掉列 SerialStart
不是数字的任何结果。事实上,当我查看以下结果时:
SELECT * FROM PE_ProductInstance WHERE ISNUMERIC(SerialStart) = 1
第 SerialStart
列的所有结果确实都是数字。所以我不明白为什么该查询会导致此错误:
Conversion failed when converting the nvarchar value '8A0357' to data type int.
还有什么奇怪的是这个查询returns没什么:
SELECT
*
FROM
(SELECT * FROM PE_ProductInstance WHERE ISNUMERIC(SerialStart) = 1) p
where
SerialStart = '8A0357'
我做错了什么?
Try_Cast 是正确的方法。请参阅此代码:
DECLARE @table TABLE(
id int identity(1,1),
name varchar(100));
INSERT into @table
VALUES
('1111'),('8A0357');
SELECT *
FROM @table p
WHERE TRY_CAST(p.Name AS int) < 8174;