我一直在嘗試使用此查詢嘗試在此論壇中找到解決方案,但我無法繼續。我需要幫助。 我有一個存儲通過船舶生命的船名的專欄,我想將它們分成三欄。 主要是我有這三個選項,PostgreSQL使用空格的子串模式
一)只有一個名字
select t2.esp1,t2.espectro,t2.espectro1, t2.id from(
select substring(t.espectro, t.posfin)::varchar as esp1, t.espectro,t.espectro1,t.id from(
select "Id" as id, strpos(shipname, ', ') as posinic, strpos(shipname, ' y ') as posfin,shipname as espectro, shipname1 as espectro1 from ships) t)t2 (esp1, espectro, espectro1, id)
where t2.esp1 not like '% y %'`)
B)兩個名字
select t2.esp1,t2.espectro,t2.espectro1, t2.id from(
select substring(t.espectro,1, t.posfin)::varchar as esp1, t.espectro,t.espectro1,t.id from(
select "Id" as id, strpos(shipname, ', ') as posinic, strpos(shipname ' y ') as posfin,shipname as espectro, shipname1 as espectro1 from ships) t)t2 (esp1, espectro, espectro1, id)
where t2.esp1 not like '%, %'`) and for the second name (`select t2.esp1,t2.espectro,t2.espectro1, t2.id from(
select substring(t.espectro, t.posfin)::varchar as esp2, t.espectro,t.espectro2,t.id from(
select "Id" as id, strpos(shipname, ', ') as posinic, strpos(shipname, ' y ') as posfin,shipname as espectro, shipname2 as espectro2 from ships) t)t2 (esp2, espectro, espectro2, id)
where t2.esp2 like '% y %' and t2.espectro not like '%, %';
和c)三個名字:我能拿第一
select substring(t.espectro,1,t.posicion) from(
select strpos(shipname, ',') as posicion,shipname as espectro from ships) t;` and third `select t2.esp3,t2.espectro,t2.espectro3, t2.id from(
select substring(t.espectro, t.posfin)::varchar as esp3, t.espectro,t.espectro3,t.id from(
select "Id" as id, strpos(shipname, ', ') as posinic, strpos(shipname, ' y ') as posfin,shipname as espectro, shipname3 as espectro3 from ships) t)t2 (esp3, espectro, espectro3, id)
where t2.esp3 like '% y %' and t2.espectro like '%, %';
但不是第二個
個三個已命名的記錄是這樣的:
Nuestra Señora del Rosario, Santo Domingo y San José
我已經試過此選項:
select substring(t.shipsnames from '%#",_y#"%' for '#') as name2 from ships t
隨着在#一些變化「模式#」找到空格和獲得的第二個名字。 然後我試圖此選項:
select t2.name2[6:7] from (regexp_split_to_array(t.shipnames, E'\\s+') as name2 from ships t) t2
,但它不工作,因爲不是每個記錄都有相同的長度,所以有的都解決了像{「城主」,「多明戈」},但其他不喜歡{「羅薩里奧」 「」}。 我不熟悉正則表達式sintax,我在PostgreSQL文檔中找到了這個例子。任何提示?
嘗試'E '[\\ S,] +''如果您需要與分割空格和逗號。 –
你想要達到什麼目的?當「NuestraSeñoradel Rosario,Santo Domingo y SanJosé」作爲輸入提供時,是否需要'NuestraSeñoradel Rosario','Santo Domingo'和'SanJosé'作爲輸出?如果是,一行有三個獨立的列或三行有一列?你能否提供你的解決方案a)和b)作爲例子? –
@ markus-benko我添加了代碼來對我使用的記錄進行子串處理。它運行良好。感謝您的反饋 –