2016-05-23 80 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));`