我有一个表(在Oracle 11gR2中)充满地址(主要是美国)作为地址行1,行2等等。大多数第1行都输入了所有大写字母,我们现在有一个任务可以将它们转换为带有initcap的小写字母。
例如 -
ADD_1
-------------
1234 KUALA STREET
333 E THOUSAND OAKS BLVD
8787 167TH PLACE SE
2370 NE HWY 99W
14010 NORTH US HWY 183
使用下面的简单查询实现了小写和initcap -
select initcap(lower(add_1)) from address;
ADD_1
-------------
1234 Kuala Street
333 E Thousand Oaks Blvd
8787 167Th Place Se
2370 Ne Hwy 99W
14010 North Us Hwy 183
现在(虽然是化妆品问题)问题很明显,查看上面第2,3和4行,您可以看到SE
已更改为Se
,NE
已更改为Ne
和US
已更改为Us
。我们需要为NE
,SE
,NW
和SW
以及US
等方向保留大写字母。同样,这是一个美化问题,但这些数据将与面向客户的移动应用程序连接,因此它需要看起来正确。除了在列或PLSQL上编写嵌套的REPLACE()
函数之外,还有更好的方法吗?我会考虑使用REGEX
函数,但在没有嵌套REGEX_REPLACE
的情况下无法想出提出模式的方法。