2014-01-24 2 views
0

Transact SQL에서와 같이 동적 SQL을 사용하여 다음을 단순화하고자합니다. MySQL 변수 대체

가능 여부와 방법 그렇다면 adive하십시오 ('', FIELD_NAME, '_complete')를

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

및 @s 사용하는 대신 대체 :

내가 좋아하는 일을하고 싶습니다.

내 현재 코드 :

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;