SQL文本搜索任何记录字段

时间:2014-07-25 00:46:50

标签: mysql sql sql-server oracle

我正在构建网格系统,我需要在任何字段或记录中搜索文本 - 甚至是字符串,时间戳和数字。

类似的东西:

SELECT * FROM MYTABLE WHERE ANY_FIELD CONTAINS ('MyText')

如果没有,那么解决方案的方法是什么?

PS:我使用mySql作为数据库,但我也必须在Oracle和SqlServer上支持它。

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

我不太了解MySQL以便真正提供任何解决方案,但是既然你提到你也需要在SQL Server上使用这种搜索方法,我可以为那方提供解决方案。

在SQL Server中,您可以通过调用一些XML和XQuery魔术来同时搜索所有列:

Declare @Value nvarchar(max)

Set @Value = 'YourSearchTextHere'

;With xml As
(
    Select  T2.Xml, T1.SomePrimaryId
    From    YourTable as T1
    Cross Apply 
    (
        Select T1.* for xml path(''), type
    ) as T2(Xml)
)
Select  c.*
From    xml x
Join    YourTable c on c.SomePrimaryId = x.SomePrimaryId
Where   x.xml.value('contains((.),sql:variable("@Value"))','bit') = 1

这是关于SQLFiddle的工作演示。

本质上,它将表中的每一行转换为XML,将列作为单独的节点,然后在XML中搜索其值包含您要搜索的值的任何节点。

答案 1 :(得分:2)

SELECT * FROM MYTABLE WHERE MATCH (ANY_FIELD_1, ANY_FIELD_2) AGAINST ('MyText' IN BOOLEAN MODE)

您还可以查看Boolean Full-Text Searches。以下是您可能需要或希望在代码中实现的更多运算符,例如

+代表AND

-代表NOT