我想使用动态 SQL 来简化以下操作,就像在 Transact SQL 中所做的那样。
我想做这样的事情:
SET @s = replace(field_name, '_complete','')
并使用@s代替replace(field_name, '_complete','')
如果可能的话请潜水,如果可以的话如何潜水。
我当前的代码:
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;
我会执行...来运行查询
最佳答案
如果我正确理解你的问题,那么你会想要使用 PREPARE和 EXECUTE声明。
例如:
SET @s = replace(field_name, '_complete','');
PREPARE mystatement FROM
SELECT DISTINCT ...... ;
EXECUTE mystatement;
关于MySQL 变量替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21334644/