Получить те же цифры - PullRequest
       1

Получить те же цифры

0 голосов
/ 05 июля 2019

База данных MySQL:

+-----------+
| Number    | {bigint(10)}
+-----------+
| 9599595995|
+-----------+
| 8438084380|
+-----------+
| 8959329599|
+-----------+
| 7778278236|
+-----------+

Легко получить такую ​​же последовательность, как: ABCDE-ABCDE , используя

SELECT * FROM numbers WHERE LEFT(Number, 5) = RIGHT(Number, 5)

Результаты: -

9599595995 и 8438084380

Какой будет запрос для получения тех же 3 цифр: - xxabcabcxx или xxabcxxabc или abcxxxabcx или abcabcxxxx или xxxxabcabc

Результаты: -*

9599595995, 8438084380, 8959329599 и 7778278236

Ответы [ 2 ]

1 голос
/ 05 июля 2019

С помощью UNION ALL построить последовательность чисел от 1 до 5, чтобы получить все возможные 3-значные подстроки каждого числа:

select distinct n.number
from (
  select 1 start union all select 2  union all select 3 union all 
  select 4 union all select 5 
) s cross join numbers n
where n.number like concat(
  '%', substring(n.number, s.start, 3), 
  '%', substring(n.number, s.start, 3), '%'
)

См. Демоверсию (я добавил больше строк).
С:

insert into numbers (number) values
('1234567890'),
('1234567123'), 
('4567123123'),                                      
('1231245675'),                                     
('9599595995'),
('8438084380'),
('8959329599'),
('7778278236'); 

Результаты:

| number     |
| ---------- |
| 1234567123 |
| 4567123123 |
| 9599595995 |
| 8438084380 |
| 8959329599 |
| 7778278236 |
1 голос
/ 05 июля 2019

Проверьте первые 10 - 3 * 2 + 1 = 5 позиций

SELECT * FROM numbers
WHERE POSITION(SUBSTRING(Number,1,3) IN SUBSTRING(Number,4,10)) > 0
    OR POSITION(SUBSTRING(Number,2,3) IN SUBSTRING(Number,5,10)) > 0
    OR POSITION(SUBSTRING(Number,3,3) IN SUBSTRING(Number,6,10)) > 0
    OR POSITION(SUBSTRING(Number,4,3) IN SUBSTRING(Number,7,10)) > 0
    OR SUBSTRING(Number,5,3) = SUBSTRING(Number,8,10)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...