sql - 地址解析 - 楼层#

标签 sql sql-server tsql ssms

我有一些地址数据需要解析。除楼层数据外,大多数地址信息都以适合我的方式提供。

对于以不同方式获取的楼层数据,我可能会得到以下格式:

“大街 123 号 2 楼”或“大街 123 号 2 楼”

如果我使用 case...when 语句来解析我的数据,如何让它确定何时获取之后的数字或之前的数字?最终我想要“Floor 2”作为示例 1,“2nd Floor”作为示例 2。

这是我当前使用的sql。

CASE WHEN (addr LIKE 'floor%' and addr LIKE '%[0-9]%' ) THEN SUBSTRING(addr, CHARINDEX('Floor ', addr), 
LEN(addr))

最佳答案

使用 PatIndex() 之和的另一个选项

示例

Declare @YourTable table (addr varchar(50))
Insert into @YourTable values
 ('123 Main Street Floor 2')
,('123 Main Street 2nd Floor')
,('123 Main Street')

select *
       ,FloorNr = NullIf(ltrim(rtrim(substring(addr,patindex('%Floor [1-9]%',addr)+patindex('% [1-9]% Floor',addr),25))),addr)
From @YourTable 

返回

addr                        FloorNr
123 Main Street Floor 2     Floor 2
123 Main Street 2nd Floor   2nd Floor
123 Main Street             NULL

关于sql - 地址解析 - 楼层#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45443288/

相关文章:

sql - 如何根据事件的日期、时间和持续时间检查 SQL 表中的平均并发事件?

c# - 不支持关键字 : 'data source' in ASP.net Entity Framework 6

sql - 使用变量与文字时远程查询速度很慢

sql - 为什么 SQL Server 标量值函数变得更慢?

c# - C#中SQL Server存储过程的异步调用

sql - 替代动态 SQL

sql - 如何在 Heroku 上向 PostgreSQL 添加 intarray 扩展

php - 我在将 csv 文件数据插入 mysql 表时遇到问题

sql - 正确的 Oracle 查询

sql-server - 如何使用 sql-server 从订单中计算重叠的订阅天数