zoukankan      html  css  js  c++  java
  • 一个简单的搜索的实现

    比如有个字段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版的!
  • 相关阅读:
    进程间通讯,线程间通讯
    进程与线程
    学习自测6.0
    学习自测5.0
    学习自测4.0
    学习自测3.0
    学习自测2.0
    学习自测1.0
    PS中怎么复制某个图层的效果?
    初学前端犯下的错误(用于反省)
  • 原文地址:https://www.cnblogs.com/yangbin1005/p/1003591.html
Copyright © 2011-2022 走看看