Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySql中拆分逗号(,)和插入符号(^)分隔的值_Mysql - Fatal编程技术网

在MySql中拆分逗号(,)和插入符号(^)分隔的值

在MySql中拆分逗号(,)和插入符号(^)分隔的值,mysql,Mysql,我正在尝试将一个列字符串值拆分为单独的行,但到目前为止没有成功 这是我的数据集 990^275,987^280,988^278 我想获得每个逗号分隔的数据集的第一个值,即990987988 etc。我尝试了子字符串\u index,但没有得到我想要的结果。这是我试过的- select rooms_tariffs, replace( rooms_tariffs,'^',','), SUBSTRING_INDEX(replace( rooms_tariffs,'^',','),

我正在尝试将一个列字符串值拆分为单独的行,但到目前为止没有成功

这是我的数据集

990^275,987^280,988^278
我想获得每个逗号分隔的数据集的第一个值
,即990987988 etc
。我尝试了
子字符串\u 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

你离我很近,我的朋友。试试这个:

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

最后,我在下面创建了一个简单的函数,然后将其调用到我的查询脚本中,从而解决了这个问题

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;

谢谢你的建议,如果我有6个值,它会工作,但当我有两个值时,它仍然会将第一个值放在第二行和第三行