2014-01-24 122 views
0

我想简化以下使用动态SQL,就像在Transact SQL中可以做的那样。MySQL变量替换

我想要做的事,如:

SET @s = replace(field_name, '_complete','') 

,并使用@s而不是取代(FIELD_NAME '_complete', '')

请adive如果可能的话,如果是如何。

我当前的代码:

select distinct  
if(instr(replace(field_name, '_complete',''),'_') <= 5 
      ,left(replace(field_name, '_complete','') 
       ,instr(replace(field_name, '_complete',''),'_') - 1 
      ) 
      ,replace(field_name, '_complete','')  
     ) AS form_id ,replace(
     if(instr(replace(field_name, '_complete',''),'_') <= 5, 
      mid(replace(field_name, '_complete',''), 
       instr(replace(field_name, '_complete',''),'_') + 1, 
       length(replace(field_name, '_complete','')) - instr(replace(field_name, '_complete',''),'_') 
       ) 
      ,replace(field_name, '_complete','') 
     ), 
     '_', 
     ' ') as form_name  ,field_name  from redcap_extract2use where field_name like '%_complete' order by 1; 

以上将被替换为:

select distinct 
    if(instr(@s,'_') <= 5 ,left(@s,instr(@s,'_') - 1),@s) AS form_id 
    ,replace(if(instr(@s,'_') <= 5, 
     mid(@s,instr(@s,'_') + 1,length(@s) - instr(@s,'_')),@s), '_', ' ') as form_name 
    ,field_name 
    from redcap_extract2use 
    where field_name like '%_complete' 
    order by 1; 

,我也有一个执行...运行查询

回答

0

如果我米正确理解你的问题,那么你会想要使用PREPAREEXECUTE陈述。

例如:

SET @s = replace(field_name, '_complete',''); 

PREPARE mystatement FROM 
SELECT DISTINCT ...... ; 

EXECUTE mystatement;