大版 求救MySql的技术问题

枫中叶 2016-07-19 03:26:30
我现在需要实现一个功能就是俩个字符串的比较及取出相同的值
如:

变量1 变量2 想要的结果
12 1234 12
135 12345 135
23 45 null
...全文
181 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
枫中叶 2016-07-19
  • 打赏
  • 举报
回复
引用 10 楼 zjcxc 的回复:
DELIMITER $$
CREATE FUNCTION f(v1 varchar(100), v2 varchar(100))
RETURNS varchar(100)
BEGIN
	DECLARE _r varchar(100) DEFAULT '';
    DECLARE _i int DEFAULT 1;
    DECLARE _a varchar(100);
    DECLARE _b varchar(100);
    IF CHAR_LENGTH(v1) > CHAR_LENGTH(v2) THEN
		SELECT v1, v2 INTO _b, _a;
	ELSE
		SELECT v1, v2 INTO _a, _b;
    END IF;
    WHILE _i <= CHAR_LENGTH(_a) DO
		IF INSTR(_b, MID(_a, _i, 1)) THEN SET _r=CONCAT(_r,MID(_a, _i, 1)); END IF;
        SET _i = _i + 1;
    END WHILE;
    RETURN _r;
END$$
DELIMITER ;

SELECT f('12345', '35'), f('257', '123457');
DROP FUNCTION f;
非常感谢 可以
枫中叶 2016-07-19
  • 打赏
  • 举报
回复
引用 10 楼 zjcxc 的回复:
DELIMITER $$
CREATE FUNCTION f(v1 varchar(100), v2 varchar(100))
RETURNS varchar(100)
BEGIN
	DECLARE _r varchar(100) DEFAULT '';
    DECLARE _i int DEFAULT 1;
    DECLARE _a varchar(100);
    DECLARE _b varchar(100);
    IF CHAR_LENGTH(v1) > CHAR_LENGTH(v2) THEN
		SELECT v1, v2 INTO _b, _a;
	ELSE
		SELECT v1, v2 INTO _a, _b;
    END IF;
    WHILE _i <= CHAR_LENGTH(_a) DO
		IF INSTR(_b, MID(_a, _i, 1)) THEN SET _r=CONCAT(_r,MID(_a, _i, 1)); END IF;
        SET _i = _i + 1;
    END WHILE;
    RETURN _r;
END$$
DELIMITER ;

SELECT f('12345', '35'), f('257', '123457');
DROP FUNCTION f;
谢谢! 我这边数据库建不了函数 报那个开关没有打开 唉 晚点让人打开那开关,再建你这个试下
zjcxc 2016-07-19
  • 打赏
  • 举报
回复
DELIMITER $$
CREATE FUNCTION f(v1 varchar(100), v2 varchar(100))
RETURNS varchar(100)
BEGIN
	DECLARE _r varchar(100) DEFAULT '';
    DECLARE _i int DEFAULT 1;
    DECLARE _a varchar(100);
    DECLARE _b varchar(100);
    IF CHAR_LENGTH(v1) > CHAR_LENGTH(v2) THEN
		SELECT v1, v2 INTO _b, _a;
	ELSE
		SELECT v1, v2 INTO _a, _b;
    END IF;
    WHILE _i <= CHAR_LENGTH(_a) DO
		IF INSTR(_b, MID(_a, _i, 1)) THEN SET _r=CONCAT(_r,MID(_a, _i, 1)); END IF;
        SET _i = _i + 1;
    END WHILE;
    RETURN _r;
END$$
DELIMITER ;

SELECT f('12345', '35'), f('257', '123457');
DROP FUNCTION f;
枫中叶 2016-07-19
  • 打赏
  • 举报
回复
变量1 变量2 想要的结果 12 1234 12 135 12345 135 23 45 null 12345 34 34 12345 1237 123 只取两者相同的值,还有交叉出现的值
枫中叶 2016-07-19
  • 打赏
  • 举报
回复
引用 7 楼 zjcxc 的回复:
如果能改存储的话,这种用 JSON很容易 select JSON_CONTAINS('[2,3,4,5,6,7,1]','[7,2,4]');
前台 就不用这么纠结了,这个是个定时任务的过程,只能在数据库中写
zjcxc 2016-07-19
  • 打赏
  • 举报
回复
如果能改存储的话,这种用 JSON很容易 select JSON_CONTAINS('[2,3,4,5,6,7,1]','[7,2,4]');
枫中叶 2016-07-19
  • 打赏
  • 举报
回复
引用 3 楼 zjcxc 的回复:
互相判断一下就行了 select @a:='12', @b:='1234', if(instr(@a,@b),@b,if(instr(@b,@a),@a,null));
还会有12345 124 这种的 则取124
枫中叶 2016-07-19
  • 打赏
  • 举报
回复
引用 3 楼 zjcxc 的回复:
互相判断一下就行了 select @a:='12', @b:='1234', if(instr(@a,@b),@b,if(instr(@b,@a),@a,null));
这个业务场景有点复杂,因为这些数字是 航班班期 就是 1234567 星期一到星期天,有些飞机是124飞,有的是12345飞之类的, 我的业务需求是 判断航班的班期有没有交叉,如果有交叉就取两个值中交叉的值
枫中叶 2016-07-19
  • 打赏
  • 举报
回复
引用 3 楼 zjcxc 的回复:
互相判断一下就行了 select @a:='12', @b:='1234', if(instr(@a,@b),@b,if(instr(@b,@a),@a,null));
如果是 35 12345 这种 就不行了
zjcxc 2016-07-19
  • 打赏
  • 举报
回复
互相判断一下就行了 select @a:='12', @b:='1234', if(instr(@a,@b),@b,if(instr(@b,@a),@a,null));
枫中叶 2016-07-19
  • 打赏
  • 举报
回复
变量1 变量2 想要的结果 12 1234 12 135 12345 135 23 45 null 12345 34 34 只取两者相同的值
枫中叶 2016-07-19
  • 打赏
  • 举报
回复
在过程中使用,是不是可以用循环来弄??

56,914

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧