請參閱 SQLFiddle 示例:
http://sqlfiddle.com/#!4/abd6d/1
這里有幾個示例地址:
明尼阿波利斯 MN 55450
明尼蘇達州明尼蘇達州 55439-8136
伯大尼好 73008
希爾斯伯勒俄勒岡州 97124
并非所有這些都用空格分隔,但足以讓我認為這是我想要接近的方法。
運行 Oracle 11g
更新:
這就是它的完成方式:
select bill_address4, Substr(bill_address4, 1, Instr(bill_address4,
',') - 1) "CITY EXMP ONE",
regexp_substr(bill_address4,'[^,] ', 1, 1) "CITY EXMP TWO",
Trim(regexp_substr(bill_address4,'[^,] ', 1, 2)) "STATE/ZIP",
TRIM(regexp_substr(Trim(regexp_substr(bill_address4,'[^,] ', 1,
2)),'[^ ] ', 1, 1)) "STATE",
TRIM(TRIM(regexp_substr(Trim(regexp_substr(bill_address4,'[^,] ',
1, 2)),'[^ ] ',1,2))||'
'||TRIM(regexp_substr(Trim(regexp_substr(bill_address4,'[^,] ', 1,
2)),'[^ ] ',1,3))||'
'||TRIM(regexp_substr(Trim(regexp_substr(bill_address4,'[^,] ', 1,
2)),'[^ ] ',1,4))) "ZIP" from so_header
uj5u.com熱心網友回復:
我不認為這很容易通過 sql 實作。您將需要通過添加更多列來重新排列原始資料和表架構。我推薦的方法是使用其他編程語言(例如 C#)進行字串操作。
uj5u.com熱心網友回復:
看看這種方法是否有幫助。
TEMPCTE 查找citystatezip列中第一個數字的位置zip: 那是從zip_positionstate: 嵌套函式substr選擇所有內容zip_position(例如“SNOHOMISH WA”)trim洗掉尾隨空格regexp_substr從該子字串中提取最后一個單詞(例如“WA”)
city: 從第一個字符開始的子字串,直到從字串后面開始的第二個空格字符的位置(參見instr's 引數)
對于您發布的示例資料(添加了 LA),如下所示:
SQL> with temp as
2 (select p.*,
3 regexp_instr(citystatezip, '\d') zip_position
4 from po_header p
5 )
6 select t.po_number, t.customer, t.citystatezip,
7 substr(t.citystatezip, t.zip_position) zip,
8 regexp_substr(trim(substr(t.citystatezip, 1, t.zip_position - 1)), '\w $') state,
9 trim(substr(t.citystatezip, 1, instr(t.citystatezip, ' ', -1, 2))) city
10 from temp t;
PO_NUMBER CUSTOME CITYSTATEZIP ZIP STATE CITY
---------- ------- ------------------------------ ---------- ---------- -----------
1 John SNOHOMISH WA 98290 98290 WA SNOHOMISH
2 Jen MINNAPOLIS MN 55439-8136 55439-8136 MN MINNAPOLIS
3 Jillian BETHANY OK 73008 73008 OK BETHANY
4 Jordan Hillsboro Oregon 97124 97124 Oregon Hillsboro
5 Scott Los Angeles CA 12345 12345 CA Los Angeles
SQL>
完美嗎?當然不是,但最終的解決方案取決于更多的樣本資料。一般來說,資料模型是錯誤的——你應該首先將這些資訊分成不同的列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/417788.html
標籤:
