所以我有这个问题:
SELECT
*
FROM
(SELECT * FROM PE_ProductInstance WHERE ISNUMERIC(SerialStart) = 1) p
where
CAST(SerialStart AS int) < 8174
从理论上讲,子查询应该过滤掉列SerialStart
不是数字的所有结果。事实上,当我看到just的结果时:
SELECT * FROM PE_ProductInstance WHERE ISNUMERIC(SerialStart) = 1
对于列SerialStart
,所有结果实际上都是数字。所以我不明白为什么查询会导致这个错误:
将nvarchar值“8A0357”转换为数据类型int时,
转换失败。
同样奇怪的是,这个查询没有返回任何内容:
SELECT
*
FROM
(SELECT * FROM PE_ProductInstance WHERE ISNUMERIC(SerialStart) = 1) p
where
SerialStart = '8A0357'
我在这里做错了什么?
发布于 2019-05-10 03:15:10
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;
https://stackoverflow.com/questions/56066065
复制相似问题