sql只搜索字符串的一部分

时间:2015-09-02 22:56:46

标签: sql

我在名为owner的数据库中有一个逗号分隔的名称列表(有时有一个所有者有时会有多个所有者...如果有多个名称以逗号分隔)。我想查找某个名称是否显示为所有者字段中的名字。 所以我需要搜索一个模式,例如使用sql中的like命令,但我需要将它限制在第一个逗号之前的部分。请注意,我想要的是条目

John Doe,Katrin

如果我的模式是“John”,则会找到

。这有可能吗? 我正在寻找sqlalchemy的解决方案,但如果在sql中有解决方案,我相信我自己可以找到sqlalchemy版本。 谢谢 卡尔

2 个答案:

答案 0 :(得分:2)

在SQL Server中,您可以执行以下操作:

select colname
where substring(lower(colname), 1, charindex(',',lower(colname))-1) like '%john%'

您可以在Oracle中执行与

相同的操作
select colname
where substr(lower(colname), 1, instr(lower(colname),',')-1) like '%john%'

如您所见,这些功能特定于数据库。

答案 1 :(得分:1)

你可以使用LIKE作为字符串的前面。 %匹配任何内容。这是sqlalchemy

session.query(Object).filter(Object.column.like('THENAME,%'))

如果您只想将“Jon Doe”与“Jon”匹配,则需要正则表达式

session.query(Object).filter(Object.column.op('regexp')('r^Jon[^,]*,'))

这将匹配从^开始Jon后跟任意数量的非,字符[^,]*后跟,

的所有内容