首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有可能找到包含字符串的行?假设我不知道哪些列包含字符串

是否有可能找到包含字符串的行?假设我不知道哪些列包含字符串
EN

Stack Overflow用户
提问于 2018-08-01 05:18:58
回答 5查看 482关注 0票数 8

我知道有几种方法可以找到哪一行的列包含一个字符串,比如使用列名regexp‘’或像‘’这样的列名

虽然目前我需要一些帮助,但我有一个有几个列的表,所有这些都是varchar或text,我不确定哪一列包含特定的字符串。只要说我想从一个表中搜索一个"xxx“,几个不同的列都可以包含这个字符串。有方法可以找到包含这个字符串的哪一列吗?

我有个想法,解决办法可能是

代码语言:javascript
复制
 select * from [table name] where [column1] regexp 'xxx' or 
    [column2] regexp 'xxx' or ...... [column39] regexp 'xxx' or .....
[colum60] regexp 'xxx' or ... or [column 80] regexp 'xxx';

我不想要这样的查询。还有其他有效的方法吗?

为了给出一个更好的例子,假设我们正在搜索一个属于博客的表。

我们有标题,网址,内容,关键词,标签,评论等等。现在我们只是说,如果有任何博客文章与“数据库规范化”相关,这个词可能出现在标题、URL或内容或任何地方,我不想一个接一个地写出来

代码语言:javascript
复制
where title regexp 'database-normalization' or content regexp 'database-normalization' or url regexp 'database-normalization'......

当有数百列时,我需要写100,或者在这种情况下,是否有一种有效的方法来代替写100或语句?比如使用if-else或集合或其他一些方法来构建查询。

EN

回答 5

Stack Overflow用户

发布于 2018-08-01 05:36:38

如果您预先了解这些列,那么您建议的可能是最有效的方法(如果有点冗长的话)。

否则,您可以从INFORMATION_SCHEMA.COLUMNS获取列名,并在此基础上构造动态SQL。

票数 1
EN

Stack Overflow用户

发布于 2018-08-01 05:57:35

他的问题不是用like子句查询特定列。他一直要求在动态列中应用相同的模式。

示例:包含3列的表-- FirstName、LastName、Address和模式匹配是“以A开头”,然后产生的查询应该是:从客户选择* FirstName,比如'A%‘或LastName像’A%‘,或者地址像’A%‘

如果您想要在业务层构建查询,这可以很容易地通过反射和EF一起完成。

如果您有动机在数据库中执行,那么您可以通过动态构建查询,然后通过sp_executesql执行。

票数 1
EN

Stack Overflow用户

发布于 2018-08-01 10:08:05

尝试以下操作(只需传递表名和要查找的字符串)-:

代码语言:javascript
复制
create proc usp_findString 
@tablename varchar(500),
@string varchar(max)
as
Begin

Declare @sql2 varchar(max),@sql nvarchar(max)
SELECT @sql2=
STUFF((SELECT ', case when '+QUOTENAME(NAME)+'='''+@string+''' then 1 else 0 end as '+NAME
FROM (select a.name from sys.columns a join sys.tables b on a.[object_id]=b.[object_id] where b.name=@tablename) T1
--WHERE T1.ID=T2.ID
FOR XML PATH('')),1,1,'')
--print @string
set @sql='select '+@sql2+' from '+@tablename
print @sql
EXEC sp_executesql @sql

End

Server 2014

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51625784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档