在SQL中使用LIKE'%'和整数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在SQL中使用LIKE'%'和整数相关的知识,希望对你有一定的参考价值。
我在SQl Server中有这个过程:
create procedure AutoSearchTeamByMobile
@Team_Mobile int
As
select * from Team_Info where Team_Mobile like @Team_Mobile+'%';
我在C#中有这个代码:
private void textBoxX4_TextChanged(object sender, EventArgs e)
{
int tMobile= int.Parse(textBoxX4.Text);
SqlCommand com = new SqlCommand("AutoSearchTeamByMobile", con);
com.Parameters.Add("@Team_Mobile", SqlDbType.Int).Value = tMobile;
com.CommandType = CommandType.StoredProcedure;
SqlDataAdapter da = new SqlDataAdapter();
DataSet ds = new DataSet();
da.SelectCommand = com;
da.Fill(ds, "Team_Info");
dataGridViewX1.DataSource = ds.Tables["Team_Info"];
}
我有一个手机号码列表,它们保存在名为Team_Mobile
的列中,数据类型为int
,其中一个以'711开头......'另一个以'700 ......'开头,所以现在,当我在textBoxX4
中只写'7'时,所有数字(以711或700开头)应该出现在dataGridViewX1
中,但是当我写'71'时,只有以'711'开头的数字才能出现在dataGridViewX1
中。当我写'70'时,只有以700开头的数字应该出现在dataGridViewX1
中。我没有得到我需要的东西,实际上我没有看到任何相同的东西,因为我没有做任何事情。
我的需求,当我写71时,所有在Team_Mobile列中有711的记录应该仍然出现,另一个数字应该隐藏。
但我用Team_Names
做了它,因为Team_Names
的数据类型是nvarchar
,但是Team_Mobile
是int
。
SQL:
create procedure AutoSearchTeam
@Team_Name nvarchar (50)
As
select * from Team_Info where Team_Name like @Team_Name+'%';
C#:
private void textBoxX1_TextChanged(object sender, EventArgs e)
{
string t_name = textBoxX1.Text;
SqlCommand com = new SqlCommand("AutoSearchTeam", con);
com.Parameters.Add("@Team_Name", SqlDbType.NVarChar, 50).Value = t_name;
com.CommandType = CommandType.StoredProcedure;
SqlDataAdapter da = new SqlDataAdapter();
DataSet ds = new DataSet();
da.SelectCommand = com;
da.Fill(ds, "Team_Info");
dataGridViewX1.DataSource = ds.Tables["Team_Info"];
}
我的问题是:无论如何要替换%
将其与整数一起使用?
有什么可以取代%
将其与整数一起使用以获得我上面解释的内容?
抱歉我的英语。
LIKE
运算符是一个字符串函数。它需要一个字符串输入来测试,并且会在进行比较之前尝试自动将输入值转换为字符串(varchar
或nvarchar
)。由于这种隐式转换,您可以使用if作为数字。
您的代码中的问题是您要添加int
和varchar
。尝试重写您的存储过程:
CREATE PROCEDURE AutoSearchTeamByMobile
@Team_Mobile int
AS
SELECT * FROM Team_Info WHERE Team_Mobile LIKE CAST(@Team_Mobile AS NVARCHAR) + '%';
将@Team_Mobile
投射到varchar
将使+
操作符正确运行,并且应该为您提供您所追求的结果。
一个风格点虽然......
由于各种原因,将电话号码存储为整数可能存在问题。在某些时候,您将遇到无法存储在整数的有限范围内的电话号码。我的一个数据库中有数千个电话号码,长度为16个字符,即使我将国际拨号指示符从它们中删除,它们也不适合整数。
将您的电话号码存储为varchar
或nvarchar
,您可以更轻松地完成任务。
例如这个
SELECT * FROM Team_Info WHERE Team_Mobile LIKE CAST(@Team_Mobile AS NVARCHAR) + '%';
是的我相信你可以通过:
SELECT * FROM MyTable WHERE Team_Mobile >= @Team_Mobile
如果不修改数据类型,则返回大于700的任何内容(根据您的示例)。
也许
SELECT * FROM MyTable WHERE CAST(Team_Mobile AS NVARCHAR(MAX)) LIKE @Team_Mobile + '%'
将列转换为字符串,从而允许您使用通配符。
以上是关于在SQL中使用LIKE'%'和整数的主要内容,如果未能解决你的问题,请参考以下文章
Python:MySQLdb中sql语句'in'和‘like’要注意的一些问题