SQL搜索问题

时间:2012-07-12 18:27:36

标签: sql sql-server

我知道这是一个简单的问题,但在这里。我使用SQL语句在Visual Studio中创建了一个搜索按钮。它适用于名字和姓氏,但我也希望它能搜索到这样的员工ID。这是代码:

SELECT ID, fName, lName, Discription, Box 
FROM tb1 
WHERE (fName LIKE '%' + @fName + '%') OR (lName LIKE '%' + @lName + '%') OR (ID LIKE '%' + @ID + '%')

当我测试它时,我收到错误:

"Conversion failed when converting the varchar value '%' to data type int.

3 个答案:

答案 0 :(得分:2)

ID LIKE '%' + @ID + '%'

ID是一个整数,'%' + @ID + '%'是一个字符串。它无法真正比​​较。整数既可以是值,也可以不是。 %通配符对整数没有任何意义。

假设你要做的是将整数转换为字符串,以便你可以匹配它的子串。因此,例如,搜索“1”将匹配包含 a“1”(10,11,12,451等)的任何整数。要做到这一点,您只需要WHERE子句中的convert the integer value to a string value

(CAST(ID AS varchar(10)) LIKE '%' + @ID + '%'

(这假设你的整数永远不会超过10个字符。根据需要调整该值。)

答案 1 :(得分:1)

您不能将LIKE与整数一起使用,因此您必须将ID转换为varchar

要转换,您可以使用CASTCONVERThttp://msdn.microsoft.com/en-us/library/ms187928.aspx

例: CAST(ID as varchar)

您的查询:

SELECT ID, fName, lName, Discription, Box 
FROM tb1 
WHERE (fName LIKE '%' + @fName + '%') OR (lName LIKE '%' + @lName + '%') OR (CAST(ID as varchar) LIKE '%' + @ID + '%')

答案 2 :(得分:1)

LIKE语法仅与字符相关的数据类型兼容。 INT类型不属于此类别。

参考http://msdn.microsoft.com/en-us/library/ms179859.aspx