查询表并从查询结果重建字符串的 Mysql 函数

标签 mysql sql function

我是 mysql 编程的新手,我会创建一个带有字符串参数的 mysql 函数 myFunction;查询一个表并从查询结果重建一个字符串,就像这个例子:

myTable
 ---------------
|id   |  value   |
 ---------------
| id1 |value1    |
| id2 |value2    |
| id3 |value3    |
| id4 |value4    |
 ---------------

调用这个函数是这样的

myFunction('value2#value1#value4')

并且必须返回

 'id2#id1#id4'

最佳答案

检查 SQL Fiddle

我的 table

-- the table def
create table myTable (id char(3), value char(6));
insert into myTable values( 'id1', 'value1');
insert into myTable values( 'id2', 'value2');
insert into myTable values( 'id3', 'value3');
insert into myTable values( 'id4', 'value4');

获取特定的id

-- get Id by Value
CREATE function getIdByValue( theValue TEXT ) 
RETURNS TEXT READS SQL DATA
BEGIN
  DECLARE theId TEXT;
  DECLARE ok INT DEFAULT FALSE;
  DECLARE crs CURSOR FOR 
    SELECT id FROM myTable where value = theValue;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET ok = TRUE;

  SET theId = '';

  OPEN crs;
  read_loop: LOOP
    FETCH crs INTO theId;
    IF ok THEN
      LEAVE read_loop;
    END IF;
  END LOOP;
  CLOSE crs;
  RETURN theId;
END//

您描述的 MyFunction

-- the myFunction, usage: myFunction('value2#value1#value4')
CREATE function myFunction( v TEXT )
RETURNS TEXT READS SQL DATA
BEGIN
  DECLARE theId TEXT;
  DECLARE theIds TEXT;
  DECLARE theValue TEXT;
  DECLARE vInstr INT;

  SET theId  = '';
  SET theIds = '';

  v_loop: LOOP

    SET vInstr = INSTR(v,'#');
    IF vInstr = 0 THEN
      SET theValue = v;
      SET theId = getIdByValue(theValue);
    ELSE
      SET theValue = SUBSTRING(v, 1, vInstr-1);
      SET v = SUBSTRING(v, vInstr+1);
      SET theId = concat( getIdByValue(theValue), '#');
    END IF;

    SET theIds = CONCAT(theIds, theId);

    IF vInstr = 0 THEN
      LEAVE v_loop;
    END IF;

  END LOOP; 

  RETURN theIds;
END//

电话

SELECT myFunction( 'value2' );
SELECT myFunction( 'value2#value4' );
SELECT myFunction( 'value2#value4#value1' );
SELECT myFunction( 'value2#value4#value1#value3' );

结果

id2
id2#id4
id2#id4#id1
id2#id4#id1#id3

关于查询表并从查询结果重建字符串的 Mysql 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30129491/

相关文章:

mysql - 如何从 MYSQL 中的一张表更新另一张表?具有额外值(value)

mysql - 从子查询中排除记录

sql - 如何对 Oracle 中的所有 session 使用单个跟踪文件?

SQL:根据子字符串连接表

Mysql 存储过程 - 空间函数

mysql - 是 MySQL 在这种查询中天生就慢,还是我配置错误?

ios - CoreData中的自引用数据对象

javascript - 在对象上调用匿名函数

c++ - 如何给对应的名字加分

r - 在 R 中使用 fitdist 时出错 - 必须定义 dllogis 函数