【发布时间】:2014-08-29 02:49:40
【问题描述】:
我有一个包含邮政地址的 SQL Server 表。在准备邮寄时,我需要进行一些字符串替换以符合 USPS 偏好(例如,“Avenue”变为“Ave”)。
为了省去枚举所有替换的麻烦,我将标签/缩写对保存在一个包含两列的表格中。有没有一种优雅的方法可以将这些中的每一个作为参数传递给更新语句中的 Replace 函数?
查找表如下所示:
CREATE TABLE addressLookup (label varchar(50),abbreviation varchar(20))
INSERT INTO addressLookup (label,abbreviation)
SELECT 'Avenue','Ave' UNION
SELECT 'Boulevard','Blvd' UNION
SELECT 'Drive','Dr' UNION
SELECT 'Lane','Ln' UNION
SELECT 'Street','St' UNION
SELECT 'First','1st' UNION
SELECT 'Second','2nd' UNION
SELECT 'Third','3rd' UNION
SELECT 'Fourth','4th' UNION
SELECT 'Fifth','5th' UNION
SELECT 'Sixth','6th' UNION
SELECT 'Seventh','7th' UNION
SELECT 'Eighth','8th' UNION
SELECT 'Ninth','9th' UNION
SELECT 'Tenth','10th' UNION
SELECT 'Eleventh','11th' UNION
SELECT 'Twelfth','12th' UNION
SELECT 'Apartment','Apt' UNION
SELECT 'Apartments','Apts' UNION
SELECT 'Floor','Fl' UNION
SELECT 'Room','Rm' UNION
SELECT 'Suite','Ste' UNION
SELECT 'Po Box','PO Box' UNION
SELECT 'P O Box','PO Box' UNION
SELECT 'P o Box','PO Box' UNION
SELECT 'Rural Route','RR' UNION
SELECT 'R Rte','RR' UNION
SELECT 'Rr','RR'
这将是正在操作的数据的一个示例(我知道这很草率,但这只是一个示例):
CREATE TABLE addresses (userid int PRIMARY KEY, address1 varchar(50), address2 varchar(50), address3 varchar(50), city varchar(50), state varchar(50), zip varchar(50))
INSERT INTO addresses (userid,address1,address2,address3,city,state,zip)
SELECT 10,'Indiana University','123 University Lane','Campus Box 123','Bloomington','IN','47405'
更新的问题是 addressLookup 表中的任意数量的记录可能与地址表的内容匹配。我想我可以实现一个递归存储过程来完成这项工作,但我希望有人会有更好、更优雅的解决方案。
编辑
澄清一下,地址表已经被填充(有几百万条记录)。我只是想预测任何可能抱怨需要真实数据来测试解决方案的人。
【问题讨论】:
标签: sql-server tsql