【问题标题】:mariadb Regexp sometime return empty in stored proceduremariadb Regexp 有时在存储过程中返回空
【发布时间】:2020-10-24 05:02:07
【问题描述】:

需要帮助,我这几天遇到了麻烦。

问题是在存储过程上运行子查询的正则表达式,有时返回空有时正确。

    REGEXP
        (
            select group_concat(_data_grupkasbank_auth.datahirarki separator '|') from _data_grupkasbank_auth where _data_grupkasbank_auth.uid='1'
        )

如果我用字符串值替换子查询,它总是正确的:

REGEXP
    (
        '/Sangatta/K3PC/|/Yayasan Balikpapan/Masjid/'
    )

我的 dbfiddle 运行完美,但不能在直接 myserver windows 10、mariadb 10.3.23 上运行

https://www.db-fiddle.com/f/pRWvdP3KUwv7rbTN7H7PZC/0

捕获: result test

subquery

direct string

(来自评论)

select  group_concat(_data_grupkasbank_view.kode_grupkasbank separator ',' )
    from  _data_grupkasbank_view
    where  _data_grupkasbank_view.hirarki_grupkasbank REGEXP 
      ( SELECT  group_concat(_data_grupkasbank_auth.datahirarki separator '|')
            from  _data_grupkasbank_auth
            where  _data_grupkasbank_auth.uid='1' 
      )
    INTO  v_tempsql

【问题讨论】:

  • 你不能简单地做一个GROUP_CONCAT()而不是那个光标循环吗??
  • 重点不是游标循环,而是正则表达式结果,我尝试删除游标并使用建议的 group_concat() 但结果仍然相同,有时空白有时正确,此处查询:选择 group_concat(_data_grupkasbank_view.kode_grupkasbank 分隔符', ') from _data_grupkasbank_view where _data_grupkasbank_view.hirarki_grupkasbank REGEXP ( select group_concat(_data_grupkasbank_auth.datahirarki separator '|') from _data_grupkasbank_auth where _data_grupkasbank_auth.uid='1' ) INTO v_tempsql;
  • 试试FIND_IN_SET()
  • 这里也一样。有什么消息吗,@Irwanto??
  • 我使用 2 个临时变量,这项工作,DECLARE v_temp1 TEXT;声明 v_temp2 文本;从表中选择 group_concat(yourfield separator '|') INTO v_temp1;设置 v_temp2 = v_temp1; select field1, field2 from table where field1 regexp v_temp2;

标签: mysql sql regex stored-procedures mariadb


【解决方案1】:

我不知道,但是这个工作,我用它来分配 SET v_temp2=v_temp1;

    -- //////////        
    
    DECLARE v_temp1 TEXT;
    DECLARE v_temp2 TEXT;
    
    select
    group_concat(yourfield separator '|')
    INTO
    v_temp1
    from
    table;
    
    SET v_temp2 = v_temp1;
    
    select 
    field1, field2
    from table
    where
    field1 regexp v_temp2;
    
    -- ///////////
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-03
    • 1970-01-01
    相关资源
    最近更新 更多