将 varchar 值 ',1,2,3' 转换为数据类型 int 时转换失败
Conversion failed when converting the varchar value ',1,2,3' to data type int
在 IN 条件下尝试使用逗号分隔参数时会出现此错误
我正在将 varchar
参数传递给如下所示的存储过程
,1,2,3
我想知道它是否包含 1(它并不总是包含 1)
在 TSQL 中最简单的方法是什么?
declare @Nums varchar(max)=',1,2,3'
if 1 in (@Nums) -- conversion error
BEGIN
select * from TestTable
END
您将需要使用 LIKE 来查看字符串是否包含字符 1。请注意,这也将匹配 12 或任何包含字符“1”的字符串。
declare @Nums varchar(max)=',1,2,3'
if @Nums LIKE '%1%'
BEGIN
select * from TestTable
END
如需匹配全号:
CREATE FUNCTION [dbo].[Split_String]
(
@ItemList NVARCHAR(4000),
@delimiter CHAR(1)
)
RETURNS @IDTable TABLE (Item VARCHAR(50))
AS
BEGIN
DECLARE @tempItemList NVARCHAR(4000)
SET @tempItemList = @ItemList
DECLARE @i INT
DECLARE @Item NVARCHAR(4000)
SET @tempItemList = REPLACE (@tempItemList, ' ', '')
SET @i = CHARINDEX(@delimiter, @tempItemList)
WHILE (LEN(@tempItemList) > 0)
BEGIN
IF @i = 0
SET @Item = @tempItemList
ELSE
SET @Item = LEFT(@tempItemList, @i - 1)
INSERT INTO @IDTable(Item) VALUES(@Item)
IF @i = 0
SET @tempItemList = ''
ELSE
SET @tempItemList = RIGHT(@tempItemList, LEN(@tempItemList) - @i)
SET @i = CHARINDEX(@delimiter, @tempItemList)
END
RETURN
END
DECLARE @Nums VARCHAR(MAX) = ',1,2,3'
DECLARE @NumberTable TABLE (item INT)
INSERT INTO @NumberTable
SELECT TRY_CAST(Item AS INT)
FROM dbo.Split_String(@Nums, ',')
IF (SELECT 1 FROM @NumberTable WHERE item = 1) = 1
BEGIN
select * from TestTable
END
您可以使用 CHARINDEX.
declare @Nums varchar(max)=',1,2,3'
IF CHARINDEX(',1,', @Nums+',') > 0
BEGIN
select * from TestTable
END
在 IN 条件下尝试使用逗号分隔参数时会出现此错误
我正在将 varchar
参数传递给如下所示的存储过程
,1,2,3
我想知道它是否包含 1(它并不总是包含 1)
在 TSQL 中最简单的方法是什么?
declare @Nums varchar(max)=',1,2,3'
if 1 in (@Nums) -- conversion error
BEGIN
select * from TestTable
END
您将需要使用 LIKE 来查看字符串是否包含字符 1。请注意,这也将匹配 12 或任何包含字符“1”的字符串。
declare @Nums varchar(max)=',1,2,3'
if @Nums LIKE '%1%'
BEGIN
select * from TestTable
END
如需匹配全号:
CREATE FUNCTION [dbo].[Split_String]
(
@ItemList NVARCHAR(4000),
@delimiter CHAR(1)
)
RETURNS @IDTable TABLE (Item VARCHAR(50))
AS
BEGIN
DECLARE @tempItemList NVARCHAR(4000)
SET @tempItemList = @ItemList
DECLARE @i INT
DECLARE @Item NVARCHAR(4000)
SET @tempItemList = REPLACE (@tempItemList, ' ', '')
SET @i = CHARINDEX(@delimiter, @tempItemList)
WHILE (LEN(@tempItemList) > 0)
BEGIN
IF @i = 0
SET @Item = @tempItemList
ELSE
SET @Item = LEFT(@tempItemList, @i - 1)
INSERT INTO @IDTable(Item) VALUES(@Item)
IF @i = 0
SET @tempItemList = ''
ELSE
SET @tempItemList = RIGHT(@tempItemList, LEN(@tempItemList) - @i)
SET @i = CHARINDEX(@delimiter, @tempItemList)
END
RETURN
END
DECLARE @Nums VARCHAR(MAX) = ',1,2,3'
DECLARE @NumberTable TABLE (item INT)
INSERT INTO @NumberTable
SELECT TRY_CAST(Item AS INT)
FROM dbo.Split_String(@Nums, ',')
IF (SELECT 1 FROM @NumberTable WHERE item = 1) = 1
BEGIN
select * from TestTable
END
您可以使用 CHARINDEX.
declare @Nums varchar(max)=',1,2,3'
IF CHARINDEX(',1,', @Nums+',') > 0
BEGIN
select * from TestTable
END