Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.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,我想选择范围地址相等的所有行 表格 id Address 1 5419-5436 East hancock Street, Somerset, VA 2 251 West Churchill Road, Arlington, TX 3 981-981 Main Street , norman, OK 4 615-615 Mountain Ave, Bridgewater, NJ 输出 id Address 3 981-981 Ma

我想选择范围地址相等的所有行

表格

  id    Address
    1   5419-5436 East hancock Street, Somerset, VA
    2   251 West Churchill Road, Arlington, TX
    3   981-981 Main Street , norman, OK
    4   615-615 Mountain Ave, Bridgewater, NJ
输出

id  Address
3   981-981 Main Street , norman, OK
4   615-615 Mountain Ave, Bridgewater, NJ
地址号码981-981615-615相等。5419-5436没有被选中,因为它的地址范围不同。

您可以使用它来选择“-”两侧的部分并比较它们:

SELECT * 
FROM Table1
WHERE SUBSTRING_INDEX(Address, '-', 1) = SUBSTRING_INDEX(SUBSTRING_INDEX(Address, '-', -1), ' ', 1)
示例数据的输出:

id    Address
3     981-981 Main Street , norman, OK 
4     615-615 Mountain Ave, Bridgewater, NJ 
create table tbl(txt varchar(100));
insert into tbl values
('5419-5436 East hancock Street, Somerset, VA'),
('251 West Churchill Road, Arlington, TX'),
('981-981 Main Street , norman, OK'),
('615-615 Mountain Ave, Bridgewater, NJ');
注意:此代码假定数字后面有空格。

您可以使用它来选择“-”两侧的部分并进行比较:

SELECT * 
FROM Table1
WHERE SUBSTRING_INDEX(Address, '-', 1) = SUBSTRING_INDEX(SUBSTRING_INDEX(Address, '-', -1), ' ', 1)
示例数据的输出:

id    Address
3     981-981 Main Street , norman, OK 
4     615-615 Mountain Ave, Bridgewater, NJ 
create table tbl(txt varchar(100));
insert into tbl values
('5419-5436 East hancock Street, Somerset, VA'),
('251 West Churchill Road, Arlington, TX'),
('981-981 Main Street , norman, OK'),
('615-615 Mountain Ave, Bridgewater, NJ');
注意:此代码假定数字后面有空格。

请尝试以下操作:

样本数据:

id    Address
3     981-981 Main Street , norman, OK 
4     615-615 Mountain Ave, Bridgewater, NJ 
create table tbl(txt varchar(100));
insert into tbl values
('5419-5436 East hancock Street, Somerset, VA'),
('251 West Churchill Road, Arlington, TX'),
('981-981 Main Street , norman, OK'),
('615-615 Mountain Ave, Bridgewater, NJ');
下面是T-SQL。在内部查询中,我们选择提取的整个地址和范围地址,并过滤掉那些没有连字符的记录(
-
)。在外部查询中,我们用连字符(
-
)拆分
范围地址
,并与
范围地址
的部分进行比较。在此基础上,我们过滤结果集

select txt from (
    select txt,
           substring(txt, 1, locate(' ', txt) - 1) RangeAddress
    from tbl
    where locate('-', substring(txt, 1, locate(' ', txt) - 1)) > 0
) a 
where substring(RangeAddress, 1, locate('-', RangeAddress) - 1) = 
                 substring(RangeAddress, locate('-', RangeAddress) + 1);
试试这个:

样本数据:

id    Address
3     981-981 Main Street , norman, OK 
4     615-615 Mountain Ave, Bridgewater, NJ 
create table tbl(txt varchar(100));
insert into tbl values
('5419-5436 East hancock Street, Somerset, VA'),
('251 West Churchill Road, Arlington, TX'),
('981-981 Main Street , norman, OK'),
('615-615 Mountain Ave, Bridgewater, NJ');
下面是T-SQL。在内部查询中,我们选择提取的整个地址和范围地址,并过滤掉那些没有连字符的记录(
-
)。在外部查询中,我们用连字符(
-
)拆分
范围地址
,并与
范围地址
的部分进行比较。在此基础上,我们过滤结果集

select txt from (
    select txt,
           substring(txt, 1, locate(' ', txt) - 1) RangeAddress
    from tbl
    where locate('-', substring(txt, 1, locate(' ', txt) - 1)) > 0
) a 
where substring(RangeAddress, 1, locate('-', RangeAddress) - 1) = 
                 substring(RangeAddress, locate('-', RangeAddress) + 1);

到目前为止你尝试了什么?我不知道从哪里开始..Mysql1的新功能)选择所有值2)将nvarchar拆分为空白(“”)3)将新值拆分为“-”,4)比较它们。另外,请看一下数据库规范化您到目前为止尝试了什么?我不知道从哪里开始..Mysql1的新功能1)选择所有值2)按空白(“”)拆分nvarchar 3)按“-”拆分新值,4)比较它们。还可以查看数据库规范化@min2bro您应该接受此答案,因为它比当前接受的答案快,并且是相同的。@min2bro您应该接受此答案,因为它比当前接受的答案快,并且是相同的。