INITCAP和LOWER不会丢失必要的大写字母

时间:2016-01-19 23:05:07

标签: sql regex oracle

我有一个表(在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已更改为SeNE已更改为NeUS已更改为Us。我们需要为NESENWSW以及US等方向保留大写字母。同样,这是一个美化问题,但这些数据将与面向客户的移动应用程序连接,因此它需要看起来正确。除了在列或PLSQL上编写嵌套的REPLACE()函数之外,还有更好的方法吗?我会考虑使用REGEX函数,但在没有嵌套REGEX_REPLACE的情况下无法想出提出模式的方法。

0 个答案:

没有答案