Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用正则表达式根据值对分类地址进行MySQL查询_Mysql_Sql - Fatal编程技术网

使用正则表达式根据值对分类地址进行MySQL查询

使用正则表达式根据值对分类地址进行MySQL查询,mysql,sql,Mysql,Sql,我有一个表,其中有一列地址。我有10-11个地名。 当我使用“Select*…”查询该表时,我想创建一个新列,该列将值与地址字段匹配,并将该值存储到exist else“Not Found”的新列中。 该表的地址列如下所示。我想从中提取区域,如BTM Layout、威尔逊花园 当我执行select查询时,输出应该是该地址字段和另外一个字段,该字段将从地址字段中获得抽象位置区域。如果任何值与地址字段不匹配,则应显示为“指定的区域Nt”如果您有已知位置列表,则可以执行以下操作: select (

我有一个表,其中有一列地址。我有10-11个地名。 当我使用“Select*…”查询该表时,我想创建一个新列,该列将值与地址字段匹配,并将该值存储到exist else“Not Found”的新列中。 该表的地址列如下所示。我想从中提取区域,如BTM Layout、威尔逊花园


当我执行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