我在名为owner的数据库中有一个逗号分隔的名称列表(有时有一个所有者有时会有多个所有者...如果有多个名称以逗号分隔)。我想查找某个名称是否显示为所有者字段中的名字。 所以我需要搜索一个模式,例如使用sql中的like命令,但我需要将它限制在第一个逗号之前的部分。请注意,我想要的是条目
John Doe,Katrin
如果我的模式是“John”,则会找到。这有可能吗? 我正在寻找sqlalchemy的解决方案,但如果在sql中有解决方案,我相信我自己可以找到sqlalchemy版本。 谢谢 卡尔
答案 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
后跟任意数量的非,
字符[^,]*
后跟,