MySQL 变量替换

标签 mysql sql parameters dynamic-sql

我想使用动态 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;

我会执行...来运行查询

最佳答案

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

例如:

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

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

EXECUTE mystatement;

关于MySQL 变量替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21334644/

相关文章:

sql - 我将如何在 mysql 查询中检索父类别?

用于文件的 Python 命令行模块

sql - sql参数保护你免受什么?

php - 在sql表中插入html

php - Mysql动态值作为别名

python - 将异构对象存储在数据库中,并使用 Python 取出它们

vb.net - VB.NET 中的 NDESK 命令行解析

php - 使用 MySQL 连接两个表后无法获取两天名称

c# - 如何在执行或设置时将 visual studio 中的文件路径修改为我的数据库

mysql - 对 DATE 列建立索引有什么优势吗?