• 一个简单的搜索的实现


    比如有个字段tag存储了多个预先设置的标签,现在要找出与输入匹配的记录,输入的字符串为多个空格分割的字符串组成
    比如:输入字符串为 “HP 惠普   2008  笔记本”,要求能找出tag字段中所有包含 HP 或 笔记本 。。。。的记录
    就是类似于简单的搜索引擎实现

    SELECT tag
      
    FROM product
     
    WHERE REGEXP_LIKE (tag,
                        
    REPLACE (UPPER (fn_compress_space (inputstr)), ' ',
                                 
    's*|')
                       );
    其中 fn_compress_space 是一个将多个连续空格压缩成单个空格的函数:
    CREATE OR REPLACE FUNCTION fn_compress_space (p_str IN VARCHAR2)
    /**//*
    将一个字符串中的多个连续空格或tab符号格式化成单个半角空格的字符串
    */

    RETURN VARCHAR2
    IS
       
    len      INT             := 0;
       str1     
    VARCHAR2 (2000);
       str2     
    VARCHAR2 (4);
       str3     
    VARCHAR2 (4)    := 'a';
       strout   
    VARCHAR2 (2000);
    BEGIN
    -- 把全角的空格和tab符、半角的tab符都转化成半角空格
       str1 :=
            
    REPLACE (REPLACE (REPLACE (p_str, ' '' '), '    '' '), ' '' ');
       
    len := LENGTH (str1);

       
    FOR i IN 1 .. len
       LOOP
          str2 :
    = SUBSTR (str1, i, 1);

          
    IF str2 != ' '
          
    THEN
             strout :
    = strout || str2;
          ELSIF str3 
    != ' '
          
    THEN
             strout :
    = strout || str2;
          
    END IF;

          str3 :
    = str2;
       
    END LOOP;

       
    RETURN TRIM (strout);
    END fn_compress_space;
    /

    以上代码为Oracle语言,希望既熟悉Oracle又熟悉SQL的高手写一个SQL版的!
  • 相关阅读:
    scala之伴生对象的继承
    scala之伴生对象说明
    “Failed to install the following Android SDK packages as some licences have not been accepted” 错误
    PATH 环境变量重复问题解决
    Ubuntu 18.04 配置java环境
    JDBC的基本使用2
    DCL的基本语法(授权)
    ZJNU 1374
    ZJNU 2184
    ZJNU 1334
  • 原文地址:https://www.cnblogs.com/yangbin1005/p/1003591.html
Copyright © 2020-2023  润新知