Разделить и сопоставить строку в MYSQL

Я хотел выбрать все строки, в которых адреса диапазона равны

Таблица

  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-981, 615-615 равны. 5419-5436 не выбран, так как у него другой диапазон адресов.

что ты уже испробовал?

openshac 25.07.2018 09:52

Я не знаю, с чего начать .. Новичок в Mysql

min2bro 25.07.2018 09:53

1) Выберите все значения 2) разделите nvarchar на пробел ('') 3) Разделите новые значения на '-', 4) сравните их. Также посмотрите нормализацию базы данных en.wikipedia.org/wiki/Database_normalization

misanthrop 25.07.2018 09:54
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
3
41
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете использовать SUBSTRING_INDEX, чтобы выбрать части по обе стороны от '-' и сравнить их:

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 

Обратите внимание, что этот код предполагает, что за числами следует пробел.

@ min2bro Вы должны принять этот ответ, так как он был опубликован быстрее, чем принятый в настоящее время, и остается таким же.

Michał Turczyn 25.07.2018 10:14

Попробуй это:

Пример данных:

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 ниже. Во внутреннем запросе мы выбираем весь адрес и извлекаем адрес диапазона и отфильтровываем те записи, у которых нет дефиса (-). Во внешнем запросе мы разбиваем RangeAddress по дефису (-) и сравниваем с частями RangeAddress. На основании этого мы фильтруем набор результатов.

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);
Ответ принят как подходящий
select * from your_table where
SUBSTRING_INDEX( SUBSTRING_INDEX(Address,'-',-1),' ',1)=SUBSTRING_INDEX(Address,'-',1)

Другие вопросы по теме