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版的!
  • 相关阅读:
    C# 中数组、ArrayList、List<T> 区别
    启动SourceNavigator出错(问题解决)
    (转)SlickEdit软件使用
    ubuntu操作记录
    ubuntu下安装Source Insight
    Android中对于没有Looper的类,要使用Toast的问题
    (转)ubuntu下安装source navigator
    (转)深入理解之 Android Handler(相当好!!!)
    Git常用命令及思维导图
    (转)android的消息处理机制(图+源码分析)——Looper,Handler,Message
  • 原文地址:https://www.cnblogs.com/yangbin1005/p/1003591.html
Copyright © 2011-2022 走看看