SQL - 通过文本框查询,可以采用不同的值

时间:2008-11-06 22:24:00

标签: asp.net sql sql-server

开发一个网站,并试图重新回到(聪明的)SQL查询等,今晚我的思绪已经完全消失了!

有一个网站http://www.ufindus.com/,其中有一个文本框,允许您输入地名或邮政编码/邮政编码。我正在尝试做类似的事情,但我在SQL上是垃圾 - 所以你如何构建一个可能潜在地查看2列(即地点和邮政编码)的SQL语句,因为你无法查询两个字段的相同值,例如

place = 'YORK' AND postcode = 'YORK'

place = 'YO21 5EA' AND postcode = 'YO21 5EA'

所以你必须把一些逻辑设置得足够智能,以检测它是否看起来像地名或邮政编码 - 这对我来说似乎太复杂了!任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:7)

您可以使用“OR”来完成工作。例如,

place ='YORK'或postcode ='YORK'

使用LIKE语句也可以做得更好,如

地点LIKE'YORK%'或邮政编码LIKE'YORK%'

(假设地点和邮政编码都是基于字符的列)

答案 1 :(得分:3)

为什么不使用OR代替AND?

place = @textboxvalue OR post = @textboxvalue

答案 2 :(得分:0)

尝试匹配地点和邮政编码有什么问题?如果我把'York'和(某处)恰好是一个有效的邮政编码,我应该得到那个结果。至于防止输入两次相同的东西,那么,你可以在进行数据库调用之前处理验证。

阿。猜猜我的上升速度有点慢。是的......其他人建议的是正确的,'或'是您正在寻找的。我误解了。

答案 3 :(得分:0)

好的,首先我假设您有一个表格,其中包含邮政编码到地名的映射。

让我们使用列'邮政编码'和' postplace '来调用此表'邮政编码'。这两种都是char型。

然后..无论你做什么,请确保用户的输入不是动态sql的一部分。确保它是参数。否则,您正在邀请SQL注入攻击,这可能会毁了您的一天。这是重要

我们的用户输入位于 @textboxstring 中。

鉴于此,您可以像这样获得邮政编码和邮寄地址:

select @textboxstring = RTRIM(@textboxstring) + '%'; select postcode, postplace from postcode where postcode like @textboxstring or postplace like @textboxstring;

请注意,我正在修改@textboxstring以获得与like的通配符匹配,而不必使用动态sql。

如果邮政编码是整数,则需要在执行sql之前将输入转换为int。所以使用@textboxint也可以这样做:

select @textboxstring = RTRIM(@textboxstring) + '%'; select postcode, postplace from postcode where postcode = @textboxint or postplace like @textboxstring;

哦,你需要处理你的搜索可以有多个结果。你可能只想要第一行。