如何从非常随机的记录中找到具有预定义规则的名称?

时间:2012-02-25 08:37:03

标签: mysql sql regex oracle

用户搜索输入为UNIX我需要从表中查找有效记录。

其中包含如下随机列表:

abnormalURL field             | Unique-Company
-----------------------------------------------
www.PDP11UNIX.com             | company1
PDP9UNIXPDP11.co.uk           | company2
.UNIXPDP11.be                 | company3
git://UNIXPDP11.com           | company4
http://PDP11UNIX              | company5
ssh://UNIXPDP11               | company6
www.UNIXPDP11.1234.-.0.9.8.be | company7

Grand father telling story,   | company8
   once upon a time there was 
   a UNIX getting born.       

UNIXPDPV11.a.hosted.com       | company9
www.UNIX.org                  | company10
b.UNIX.x.org                  | company11
http://UNIX.be                | company12
http://www.UNIX.com           | company13
UNIX.nl                       | company14
UNIX.a.org                    | company15 
UNIX.b.org                    | company55
http://www.UNIX.PDP11.org/    | company16
http://www.PDP11.UNIX.org/    | company17

我使用LIKE % %但在许多其他随机记录中这是不正确的。我也尝试了LIKE 'UNIX%',这也是输出不正确。

* 我的预期输出仅为上述列表中的2,应显示类似于以下内容:*

www.UNIX.org                  | company10
http://UNIX.be                | company12
http://www.UNIX.com           | company13
UNIX.nl                       | company14

如果搜索结果为UNIX.a,那么它将显示如下(仅限):

UNIX.a.org                    | company15

如何使用SQL / C执行此操作?

1 个答案:

答案 0 :(得分:2)

行。这是一个非常疯狂的猜测。我假设当用户输入“UNIX”时,您希望所有条目都以其中一个开头:

http://UNIX
http://www.UNIX 
www.UNIX

或只是

UNIX

并以其中一个结束:

UNIX.com
UNIX.org
UNIX.be
UNIX.nl

如果我的猜测是正确的,那么这样的事情可能会起作用(在MySQL中):

SELECT t.*
FROM 
      ( SELECT 'http://' AS prefix UNION ALL
        SELECT 'http://www.' UNION ALL
        SELECT 'www.' UNION ALL
        SELECT 'ftp://' UNION ALL
        SELECT ''
      ) pre
  CROSS JOIN
      ( SELECT '.com' AS suffix UNION ALL
        SELECT '.org' UNION ALL
        SELECT '.nl' UNION ALL
        SELECT '.be' UNION ALL
        SELECT '.gr'
      ) s
  JOIN
      TableX t
    ON t.abnormalURL = CONCAT(p.prefix, @userInput, s.suffix)