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

Posted

技术标签:

【中文标题】SQL - 通过可以采用不同值的文本框进行查询【英文标题】:SQL - querying via a textbox which could take different values 【发布时间】:2008-11-06 22:23:59 【问题描述】:

开发一个网站,只是想回到(聪明的)SQL 查询等的摇摆中,今晚我的思绪完全消失了!

有一个网站http://www.ufindus.com/,它有一个文本框,可让您输入地名或邮政编码/邮政编码。我正在尝试做类似的事情,但我对 SQL 很垃圾 - 那么你如何构造一个可能查看 2 列(即地点和邮政编码)的 SQL 语句,因为你不能查询两个字段的相同值,例如

place = 'YORK' AND postcode = 'YORK'

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

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

【问题讨论】:

【参考方案1】:

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

地点 = 'YORK' 或邮政编码 = 'YORK'

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

WHERE place LIKE 'YORK%' or postcode LIKE 'YORK%'

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

【讨论】:

【参考方案2】:

为什么不使用 OR 而不是 AND?

place = @textboxvalue OR post = @textboxvalue

【讨论】:

【参考方案3】:

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

啊。猜猜我的吸收速度有点慢。是的...其他人的建议是正确的,“或”就是您要寻找的。我误解了。

【讨论】:

【参考方案4】:

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

让我们将此表称为“postcode”,列“postcode”和“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;

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

【讨论】:

以上是关于SQL - 通过可以采用不同值的文本框进行查询的主要内容,如果未能解决你的问题,请参考以下文章

2个不同的使用VBA代码查询相同的文本框

一个通过值选择器接受特定值的文本框

html文本框圆角边框css样式怎么写

尝试忽略 Winforms 中的空文本框以过滤 sql 搜索查询

VB.NET操作SQL SERVER 2008数据库,想把文本框中输入的字符串转化为数字进行数据库的更新,却一直失败

将 SQL 查询转换为 JPQL 查询 - 总和具有特定文本值的属性数