使用正则表达式根据值对分类地址进行MySQL查询
我有一个表,其中有一列地址。我有10-11个地名。 当我使用“Select*…”查询该表时,我想创建一个新列,该列将值与地址字段匹配,并将该值存储到exist else“Not Found”的新列中。 该表的地址列如下所示。我想从中提取区域,如BTM Layout、威尔逊花园使用正则表达式根据值对分类地址进行MySQL查询,mysql,sql,Mysql,Sql,我有一个表,其中有一列地址。我有10-11个地名。 当我使用“Select*…”查询该表时,我想创建一个新列,该列将值与地址字段匹配,并将该值存储到exist else“Not Found”的新列中。 该表的地址列如下所示。我想从中提取区域,如BTM Layout、威尔逊花园 当我执行select查询时,输出应该是该地址字段和另外一个字段,该字段将从地址字段中获得抽象位置区域。如果任何值与地址字段不匹配,则应显示为“指定的区域Nt”如果您有已知位置列表,则可以执行以下操作: select (
当我执行select查询时,输出应该是该地址字段和另外一个字段,该字段将从地址字段中获得抽象位置区域。如果任何值与地址字段不匹配,则应显示为“指定的区域Nt”如果您有已知位置列表,则可以执行以下操作:
select (case when address regexp '(, BTM Layout|, Bapuji Nagar|, Adugodi)$'
then substring_index(address, ', ', -1)
else 'Not Found'
end)
可以扩展正则表达式以包含任意多个位置
或者,您实际上不需要正则表达式:
select (case when substring_index(address, ', ', -1) in ('BTM Layout', 'Bapuji Nagar', 'Adugodi', . . .)
then substring_index(address, ', ', -1)
else 'Not Found'
end)
考虑在较大的地址表(
t1
)和容纳BTM LAYT的10-11个位置(t2
)的较小表(威尔逊花园)之间进行交叉连接查询(在FROM
子句中没有连接但有一列表的查询)。。。价值观这将是可伸缩的,而不是在子句中手动输入/编辑位置
然后在WHERE
子句中使用LIKE
表达式来匹配作为较大地址字符串一部分的位置。但是,若要返回所有具有匹配位置的原始地址值,请使用带有交叉连接作为派生表的查询(sub
)
如果确实需要使用正则表达式,请将派生表中的LIKE
表达式替换为以下内容:
WHERE t1.address regexp t2.place
感谢Gordan的快速回复。这将打印相应行中的值。只需在select语句中的Gordon示例中添加地址,即可返回相应的地址值。
WHERE t1.address regexp t2.place