我正在构建网格系统,我需要在任何字段或记录中搜索文本 - 甚至是字符串,时间戳和数字。
类似的东西:
SELECT * FROM MYTABLE WHERE ANY_FIELD CONTAINS ('MyText')
如果没有,那么解决方案的方法是什么?
PS:我使用mySql作为数据库,但我也必须在Oracle和SqlServer上支持它。
感谢您的帮助。
答案 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