2016-03-21 21 views
0

列文字列の値を別々の行に分割しようとしていますが、これまでのところ運がありません。MySqlで区切られたカンマ(、)とキャレット(^)の値

は、ここに私のデータは、私が最初にデータをカンマ区切り、それぞれの値i.e. 990,987,988 etcを設定を取得したい

990^275,987^280,988^278 

を設定しています。私は substring_indexを試しましたが、私が望むように結果を得られませんでした。

select 
    rooms_tariffs, 
    replace(rooms_tariffs,'^',','), 
    SUBSTRING_INDEX(replace(rooms_tariffs,'^',','), ',', 1) "First", 
    SUBSTRING_INDEX(SUBSTRING_INDEX(rooms_tariffs,'^',2),',', -1) "second" 
from ewqhv_jomres_contracts 
order by 1 desc; 

出力を - - ここに私がしようとしたものです

rooms_tariffs | rooms_tariffs | First | second 
991^278,990^275 991,278,990,275 991 990 
991^278,984^280 991,278,984,280 991 984 
991^278 991,278 991 991^278 
991^278 991,278 991 991^278 

答えて

0

あなたは、私の友人はかなり近くでした。この方法を試してください。

SELECT `data`.`room_tariffs` AS `room_tariffs`, 
      SUBSTRING_INDEX(`data`.`room_tariffs`, ',', 1) AS `First`, 
      SUBSTRING_INDEX(SUBSTRING_INDEX(`data`.`room_tariffs`, ',', -4), ',', 1) AS `Second`, 
      SUBSTRING_INDEX(SUBSTRING_INDEX(`data`.`room_tariffs`, ',', -2), ',', 1) AS `Third` 
FROM (
    SELECT REPLACE(`room_tariffs`, '^', ',') AS `room_tariffs` 
    FROM  `ewqhv_jomres_contracts` 
    ORDER BY 1 desc; 
    ) AS `data` 

出力:

room_tariffs    First Second Third 
990,275,987,280,988,278  990  987  988 
+0

おかげで、Iは、6つの値を持っている場合、それは動作しますが、私は2つを持っているとき、それはまだ第二に最初の値を配置します第3行 – Tajuddin

0

は最後に、私はその後、私のクエリスクリプトにそれを呼び出して、以下の簡単な関数を作成することによってそれを解決してきました。

CREATE FUNCTION `SPLIT_STR`(x VARCHAR(255), delim VARCHAR(12), pos INT) RETURNS varchar(255) CHARSET latin1 RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),  LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1), 
    delim, ''); 

私は以下のように私のSQLクエリでこの関数を呼び出している - あなたの提案のための

select room_no, split_str(room_no,',',1) "One", split_str(room_no,',',3) "Two", split_str(room_no,',',5) "Three" from room_view where tag=676648xx; 
関連する問題