`
hbsession
  • 浏览: 7700 次
  • 性别: Icon_minigender_1
  • 来自: 四川
最近访客 更多访客>>
社区版块
存档分类
最新评论

mysql利用存储过程实现类似split的效果

阅读更多
问题前景:
       数据库存在关键字以“;”隔开,查询的结果集按关键字幅出现的次数降序排列,并按单个关键词在页面展示。以下为存储过程
CREATE PROCEDURE `proc_split`(
    inputstring varchar(1000),
    delim char(1)
)
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
begin
    declare strlen int;
    declare last_index int;
    declare cur_index int;
    declare cur_char VARCHAR(200);
    declare len int;
    set cur_index=1;
    set last_index=0;
    set strlen=length(inputstring);
    drop temporary table if exists splittable;/**/
    create TEMPORARY table splittable(
        id int AUTO_INCREMENT,
        value VARCHAR(20),
        PRIMARY KEY (`ID`),
        UNIQUE KEY `ID` (`ID`)
    ) ;
    WHILE(cur_index<=strlen) DO   
    begin
        if substring(inputstring from cur_index for 1)=delim or cur_index=strlen then
            set len=cur_index-last_index-1;
            if cur_index=strlen then
               set len=len+1;
            end if;
            insert into splittable(`value`)values(substring(inputstring from (last_index+1) for len));
            set last_index=cur_index;
        end if;
        set cur_index=cur_index+1;
    END;
    end while;
end 
/*测试*/
call proc_split('a;b;c;d',';');
select * from splittable;

上面只适合于对单个词做处理,可能我们自己遇到的情况是,将所有的字段(每个字段可能只包含一个关键词,也可能包含多个关键词)处理成一个多关键词处理,附带一个sql可以实现
select group_concat(name separator ';') as tags from tags where LENGTH(name)>0

参数说明:LENGTH(name)>0 是为空的字段不做处理
分享到:
评论

相关推荐

    mysql split函数用逗号分隔的实现

    虽然MySQL的标准库中没有直接提供`split`函数,但可以通过自定义存储过程和函数来实现类似的功能。这里我们将详细讲解如何在MySQL中实现一个用逗号分隔的`split`函数。 首先,我们创建一个存储过程`splitString`,...

    部门分列sql.zip_实现组织构架类似excel分列功能

    在不支持递归的数据库中,可能需要通过编写存储过程或者应用端的代码来实现这个功能。 压缩包中的"详情看sql文件.docx"可能包含了更具体的SQL脚本示例,而"部门分列sql.sql"可能直接包含了实现这个功能的SQL语句。...

    Android-将中华新华字典数据转换到可被导入到MySQL的sql文件

    最后,为了将.sql文件导入到MySQL数据库,你可以使用`mysql`命令行工具或者在Android应用中通过执行SQL语句来实现。在Android中,你可能需要使用`SQLiteDatabase`类的`execSQL()`方法,但考虑到数据量大,更推荐使用...

    实用SQL解决开发难题

    虽然SQL本身并不支持像传统编程语言那样的循环结构,但我们可以借助存储过程和递归查询来实现类似的功能。例如,在MySQL中,可以创建一个存储过程,使用`WHILE`循环来逐步插入或更新数据。而在Oracle中,可以使用...

    PHP实现图片转字符画1

    定义字符串变量`$strChars`存储字符画内容,设置默认字体`$strFont`,并使用`str_split()`函数将字符集分割到数组中。同时,初始化其他与参数相关的变量,如缩放比例`$iScale`、颜色开关`$bColor`、透明度`$bAlpha`...

    mysql-分区

    MySQL 分区(Partition)是一种数据库优化技术,用于将大型表的数据分布到多个物理存储段,以提高查询性能和管理效率。分区通常适用于处理大量数据的表,尤其在数据仓库环境中非常常见。以下是对MySQL分区的一些关键...

    利用Split函数进行多关键字检索

    在这个问题中,讨论的是如何使用`Split`函数来处理存储在数据库中的多关键字数据。假设我们有一个字段,其中的关键字用竖线`|`分隔,例如"服装|荷花|名牌|中国"。当我们需要根据这些关键字进行搜索时,我们需要将...

    Apache Hadoop---Sqoop.docx

    - 并行性:Sqoop 利用 MapReduce 实现数据并行处理,提高效率,传统 ETL 工具可能需要更多的定制开发来实现类似功能。 - 自动化:Sqoop 的自动化程度较高,减少手动操作,而传统 ETL 工具可能需要更多脚本编写和...

    黑马面试宝典知识点复习

    - 提高性能:存储过程可以在服务器端直接执行,减少网络传输开销。 - 保证安全性:可以通过存储过程限制用户的数据库访问权限。 #### MySQL性能优化举例 - **索引优化**:合理使用索引来加速查询。 - **查询优化*...

    数据分析系统Hive

    2. **元数据存储 (Metastore)**:这是 Hive 存储表定义、分区等元数据的地方,默认情况下会使用自带的 Derby 数据库进行存储,但在生产环境中通常会使用 MySQL 等更为强大的数据库管理系统。 3. **驱动器 (Driver)**...

    《Beyond_SQLi_Obfuscate_and_Bypass》.pdf

    5. 使用参数化查询和存储过程。 **[0x05] - 结论** 结论部分可能总结了SQL注入的威胁现状,强调了即使存在防护措施,攻击者仍然有可能找到绕过方法。论文提醒读者,防御SQL注入需要持续的更新和适应,因为攻击者...

    python批量从上市公司年报中获取指定内容.rar

    9. **存储与导出**:提取和分析后的数据可能需要存储到数据库(如SQLite或MySQL)或导出为CSV、Excel等格式,Python的`sqlite3`库和`pandas`的`to_csv()`方法可以完成这些任务。 10. **并发处理**:如果年报数量...

    Phoenix技术与应用

    它能够使用户以类似关系数据库的方式对 HBase 进行操作,极大地提高了 HBase 的易用性和查询效率。Phoenix 主要应用于低延迟的在线事务处理 (OLTP) 和操作型数据分析场景。 - **SQL引擎**:Phoenix 支持标准 SQL 92...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    传统上网页的交互作用是通过CGI来实现的。CGI程序的伸缩性不很理想,因为它为每一个正在运行的CGI程序开一个独立进程。解决方法就是将经常用来编写CGI程序的语言的解释器编译进你的web服务器(比如mod_perl,JSP)。PHP...

    rl-webscrapping

    在这个项目中,开发者利用JavaScript的灵活性和强大的DOM操作能力,结合HTTP请求库,实现了从指定网站获取信息的功能。JavaScript在Web开发中的广泛使用使得这个项目具有很高的实用价值,尤其对于需要在客户端执行的...

    Flink超神文档.pdf

    - **安装**: Flink 的安装过程相对简单,可以通过下载二进制包或通过 Maven 添加依赖来实现。 - **部署**: 部署 Flink 时,可以选择不同的部署模式,如 Standalone 模式、YARN 模式等。 **3.2 Standalone集群安装&...

Global site tag (gtag.js) - Google Analytics