我有一个数据库,用户可以在其中搜索地址。但是,数据库中的某些地址列在一个范围内。例如,120-125主st可以是数据库中的记录。如果用户搜索123 Main St,是否有办法让120-125记录显示出来?这需要相当动态地包含所有范围,所以我不确定BETWEEN子句是否能够正常工作。有任何想法吗?搜索任意范围内的值
回答
为自己节省许多许多令人头痛的问题,并为此类数据制作专用字段。你甚至可以创建解析地址,填补了触发的帮助下,这些领域(后插入,更新)功能:
create function rangeFrom(@address varchar(100)) returns int as
begin
declare @pos int
set @address = replace(@address, ' ', '') + '.'
set @pos = patindex('%[0-9]%', @address)
if @pos > 0
begin
set @address = right(@address, len(@address) - @pos + 1)
set @pos = patindex('%[0-9][^0-9]%', @address)
return left(@address, @pos)
end
return null
end
-- ------------------------------------------------------------
create function rangeTo(@address varchar(100)) returns int as
begin
declare @pos int
set @address = replace(@address, ' ', '') + '.'
set @pos = patindex('%[0-9]-[0-9]%', @address)
if @pos > 0
begin
set @address = right(@address, len(@address) - @pos - 1)
set @pos = patindex('%[0-9][^0-9]%', @address)
return left(@address, @pos)
end
return null
end
后来,你可以打电话给他们(例如,在你的触发):
select dbo.rangeFrom('120-125 main st') -- returns 120
select dbo.rangeTo('120-125 main st') -- returns 125
这样您就可以使用BETWEEN运算符使用实际字段。
谢谢,我对此有点新,所以我不确定语法如何。这两个函数都应该作为存储过程创建,然后在实际的SQL查询中调用是否正确? – Aeonstrife
@Aeonstrife:它们将在您执行这些语句的数据库中作为[用户定义的函数](http://msdn.microsoft.com/en-us/library/ms191007.aspx)(不是存储过程)创建。之后,您可以使用它们,例如在触发器中,或者在插入或更新行时显式使用它们。 – Tomalak
您可以使用正则表达式从地址栏中的“x-y Main Street”中提取x和y的值,然后检查您的搜索值是否在两个提取的值之间。
匹配ZIP /邮政编码,以确保您在地理上查找同一条街道上的记录(这也应该防止重叠范围)。
不知道如果没有在单独的列中定义范围,您将能够做到这一点,我的解决方案并不精彩,但希望它可以帮助你,如果你被迫使用字符串操作。
- 1. 在SOLR的搜索范围内搜索
- 2. 如何在搜索范围内搜索?
- 3. Mysql的范围内的搜索
- 4. 在两个范围内的VBA搜索
- 5. 显示搜索范围内的结果
- 6. 单元格范围内的宏搜索
- 7. 搜索范围内的算法
- 8. 搜索范围内的数字列表
- 9. 任意类型的范围
- 10. 使用djapian搜索int值的范围
- 11. 在ArrayList中搜索Integer值的范围
- 12. VBA搜索范围
- 13. AngularJS - 范围搜索
- 14. CouchBase范围搜索
- 15. 使用范围内的任意最大值()
- 16. 如何计算任意范围内的中间值
- 17. 在时间范围内搜索
- 18. '搜索'未在此范围内声明
- 19. 在时间范围内搜索
- 20. 用于搜索范围内的值的Perl正则表达式
- 21. 的Javascript搜索范围
- 22. 搜索栏上的范围
- 23. MySQL的搜索在范围
- 24. VBA搜索值后定义范围
- 25. sympy任意函数范围
- 26. 循环搜索并打印范围内的唯一值
- 27. b搜索和搜索范围?
- 28. Grails搜索搜索BigDecimal范围
- 29. 搜索再次搜索范围
- 30. 二进制搜索树 - 搜索范围
你能否提供一个你的数据是什么样子的样本,以及你喜欢什么样的样子?谢谢! – jworrin