如何比较字符串变量和整数

时间:2019-06-12 05:49:41

标签: sql sql-server

我有此表结构和一些示例数据。我想通过参数返回多个ID的数据。我已经声明了一个参数字符串,现在我想将其与列进行比较,但是由于ID是整数,所以它不允许。 有人可以在这里给我任何帮助吗?

CREATE TABLE EMPLOYEE
(
    ID INT,
    EMPLOYEE_NAME VARCHAR(50)
);

INSERT INTO EMPLOYEE VALUES (1, 'Isaac Frempong');
INSERT INTO EMPLOYEE VALUES (2, 'Eric Ortizz');

DECLARE @StrID VARCHAR(20) = '1, 2'
SELECT * FROM EMPLOYEE
WHERE ID = @StrID

5 个答案:

答案 0 :(得分:1)

最简单的解决方案是使用动态SQL

DECLARE @sql VARCHAR(1000) = 'SELECT * FROM EMPLOYEE WHERE ID IN (' + @StrID + ')';
EXEC(@sql);

答案 1 :(得分:1)

对于SQL Server 2017+,您可以使用STRING_SPLIT一个表值函数,该函数将字符串拆分为子字符串行

CREATE TABLE EMPLOYEE
(
ID INT,
EMPLOYEE_NAME VARCHAR(50)
);

INSERT INTO EMPLOYEE VALUES (1, 'Isaac Frempong');
INSERT INTO EMPLOYEE VALUES (2, 'Eric Ortizz');

DECLARE @StrID VARCHAR(20) = '1, 2'
SELECT * FROM EMPLOYEE
WHERE ID IN (SELECT value FROM STRING_SPLIT (@StrID,','))

请参阅此工作fiddle

答案 2 :(得分:1)

SELECT * FROM EMPLOYEE
    WHERE @StrID+',' LIKE '%'+cast(ID as varchar(20))+'%,' 

相当差的性能,因为它需要进行表扫描,但足够安全。

不过,通常,您的ID列表应该是一个表变量,您可以使用JOININ做适当的操作

答案 3 :(得分:1)

创建用户定义的表类型,并将其作为参数传递。

tickers

有关更多详细信息,请参见https://docs.microsoft.com/en-us/sql/relational-databases/tables/use-table-valued-parameters-database-engine?view=sql-server-2017

答案 4 :(得分:0)

您可以使用Cast中的SQL-Server将其转换为适当的数据类型。来源Here

WHERE CAST(ID AS VARCHAR(20)) = @StrID

或者::您可以使用CONVERT函数。

WHERE CONVERT(VARCHAR(20), ID) = @StrID