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您应该接受此答案,因为它比当前接受的答案快,并且是相同的。