sql仅搜索字符串的一部分

sql仅搜索字符串的一部分,sql,Sql,我在一个名为owners的数据库中有一个逗号分隔的名称列表(有时有一个所有者,有时有多个所有者…如果有多个所有者,则名称以逗号分隔)。我想知道某个名字是否作为名字出现在owners字段中。 因此,我需要搜索一个模式,例如使用sql中的like命令,但我需要将其限制在第一个逗号之前的部分。请注意,我希望该条目 约翰·多伊,卡特林 如果我的模式是“John”,就会找到。那有可能吗? 我正在寻找sqlalchemy中的解决方案,但是如果sql中有解决方案,我相信我自己可以找到sqlalchemy版本。

我在一个名为owners的数据库中有一个逗号分隔的名称列表(有时有一个所有者,有时有多个所有者…如果有多个所有者,则名称以逗号分隔)。我想知道某个名字是否作为名字出现在owners字段中。 因此,我需要搜索一个模式,例如使用sql中的like命令,但我需要将其限制在第一个逗号之前的部分。请注意,我希望该条目

约翰·多伊,卡特林

如果我的模式是“John”,就会找到。那有可能吗? 我正在寻找sqlalchemy中的解决方案,但是如果sql中有解决方案,我相信我自己可以找到sqlalchemy版本。 谢谢
卡尔

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

session.query(Object).filter(Object.column.like('THENAME,%'))
如果你想把“Jon Doe”和“Jon”匹配起来,你需要一个正则表达式

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

这将匹配以
^
开头的任何内容,其中
Jon
后跟任意数量的非
字符
[^,]*
后跟

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

session.query(Object).filter(Object.column.like('THENAME,%'))
如果你想把“Jon Doe”和“Jon”匹配起来,你需要一个正则表达式

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

这将匹配以
^
开头的任何内容,其中
Jon
后跟任意数量的非
字符
[^,]*
后跟

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

session.query(Object).filter(Object.column.like('THENAME,%'))
如果你想把“Jon Doe”和“Jon”匹配起来,你需要一个正则表达式

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

这将匹配以
^
开头的任何内容,其中
Jon
后跟任意数量的非
字符
[^,]*
后跟

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

session.query(Object).filter(Object.column.like('THENAME,%'))
如果你想把“Jon Doe”和“Jon”匹配起来,你需要一个正则表达式

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

这将匹配任何以
^
开头的内容,其中
Jon
后跟任意数量的非
字符
[^,]*
后跟

,在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%'

正如您所看到的,这些函数特定于数据库。

在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%'

正如您所看到的,这些函数特定于数据库。

在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%'

正如您所看到的,这些函数特定于数据库。

在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%'


正如您所见,这些函数是特定于数据库的。

您是否有可能重新设计表,以便与
所有者
表建立一对多关系?这将使这样的查询更容易。您是否有可能重新设计表,以便与
所有者
表建立一对多关系?这将使这样的查询更容易。您是否有可能重新设计表,以便与
所有者
表建立一对多关系?这将使这样的查询更容易。您是否有可能重新设计表,以便与
所有者
表建立一对多关系?这将使类似的查询更容易。将colname的第二和第三个实例替换为colname+','以避免出现不带逗号的单个名称问题。将colname的第二和第三个实例替换为colname+','以避免出现不带逗号的单个名称问题。将colname的第二和第三个实例替换为colname+','为了避免使用不带逗号的单一名称的问题,请将colname的第二个和第三个实例替换为colname+','以避开没有逗号的单名问题。如果名称仅为John,则此项是否会拾取John Doe条目?如果名称仅为John,则此项是否会拾取John Doe条目?如果名称仅为John,则此项是否拾取John Doe条目?如果名称仅为John,则此项是否拾取John Doe条目John?不,因为你需要正则表达式。为该正则表达式更新。如果名称仅为John,这会拾取John Doe条目吗?不,因为你需要为该正则表达式更新正则表达式。