2016-05-23 38 views
-2

我有这样分割字符串和存储

message_type=something, Hours=0, SQM=0, user_name=xxxxx, Boards=0, Charge=0, Proofs=0 

一个字符串,我需要后,等于让所有的值(=)(的东西,为XXXXX,0,0,0,0),我们有使用SQL将它们存储在变量中

+1

您正在使用什么数据库管理系统? –

+1

“使用SQL将它们存储在变量中”?现在的字符串在哪里?你想存储在哪里?为什么你认为你需要SQL? –

+0

该字符串是在dbms中的列,我必须得到它并拆分该字符串并存储值变量。我正在写一个存储过程,所以我需要SQL。 – Akhila

回答

0

如果我理解正确,您需要这样的东西?

SELECT 
    RIGHT('message_type=something', (CHARINDEX('=', REVERSE('message_type=something'), 0)) - 1) 
+0

RIGHT,CHARINDEX和REVERSE都是特定于产品的函数,用于解答没有指定dbms的问题。至少告诉OP你的答案是哪个dbms! – jarlh

+0

这是为什么我说“如果我理解正确” –

0

请尝试下面的代码。它在SQL Server 2012中工作正常:

BEGIN 
      DECLARE @str VARCHAR(2000) 
      DECLARE @input VARCHAR(4000) 
      DECLARE @ind Int 
      DECLARE @Count int 
      DECLARE @max int 
      SET @max =0 

      DECLARE @Result TABLE (ID int identity(1,1),value varchar(1000)) 
      SET @input ='message_type=something, Hours=0, SQM=0, user_name=xxxxx, Boards=0, Charge=0, Proofs=0' 
      IF(@input is not null) 
       BEGIN 
        SET @ind = CharIndex(',',@input) 
        WHILE @ind > 0 
         BEGIN 
           SET @str = SUBSTRING(@input,1,@ind-1) 
           SET @input = SUBSTRING(@input,@ind+1,LEN(@input)[email protected]) 
           INSERT INTO @Result values (@str) 
           SET @ind = CharIndex(',',@input) 
         END 
       SET @str = @input 
       INSERT INTO @Result values (@str) 
      END 

      SET @Count = (SELECT Max(ID) from @Result) 

      WHILE @Count > @max 
       BEGIN 
       SET @max = @max +1 
       DECLARE @Value varchar(1000) 
       SET @Value = (SELECT SUBSTRING(value, CHARINDEX('=', value) + 1, LEN(value)) from @Result WHERE ID [email protected]) 
       SELECT @value 
      END 
    END 

在最后while循环中,您可以根据需要指定相应的变量。

+0

dbms是sybase,当我试着代码我得到了这样的错误函数-CHARINDEX调用错误的数量或类型的参数(S) 。 – Akhila

0

尝试此查询:

`select wm_concat(substr(val,instr(val,'=')+1)) from (select regexp_substr ('message_type=something, 
Hours=0, SQM=0, user_name=xxxxx, Boards=0, Charge=0, Proofs=0', '[^,]+', 1, rn) as val 
from dual 
cross 
join (select rownum as rn 
     from dual 
     connect by level <= 7));`