【TechTarget中国原创】问:我想用REPLACE语句替换AddressLine1域里面的数据,也就是想删除逗号、周期、连字符,并将 '3 South '替换成'3 S ' (as in 123 South Main Street to 123 S Main Street),加上 95件其他的事情 。
我需要指出的是如何将' Road' at the end of the address to '替换成' Rd' ,但是要在不改变地址的情况下进行,如将 '2884 N Roadrunner Pkwy'改变为'2884 N Rdrunner Pkwy'。为了达到这个目的,我要进行如下操作:REPLACE(' Road[ENDOFLINE]',' Rd[ENDOFLINE]')。但是很显然这样做不起作用。
答:首先就是整理地址这样繁重的工作。这真的属于一项比较烦人的任务之一,但是在数据库外面进行该操作要比用SQL进行操作好得多(这点我相信你应该知道:如何面临要改变的95东西)。
假设你现在用的数据库系统包括REPLACE 函数(不是所有的数据库系统都是这样)。你要找的REPLACE 如下:
UPDATE yourtable SET AddressLine1 = REPLACE(AddressLine1, ' Road', ' Rd') WHERE AddressLine1 LIKE '% Road' |
只有以' Road'.结尾的那些行才能进行更新操作。注意LIKE字符串开头有个通配符,但是没有结尾的通配符。
WHERE AddressLine1 LIKE '% Road' AND DATALENGTH(Replace(AddressLine1, ' Road', ' Rd')) = DATALENGTH(AddressLine1)-2 |
这一附加条件是用的是相同的 REPLACE函数,并且将结果长度就好比是原列值长度。因为我们只想替换一件事情,由于LIKE条件的限制,被替换的这件事情只能位于末尾,新的长度也只会比原来的长度小2(因为'oa' 这两个字母已经被删除了)。 很漂亮,不是吗?