Могу ли я комбинировать как и равные для получения данных? - PullRequest
0 голосов
/ 28 июня 2018

У меня есть такие данные

1234500010
1234500020
1234500021
12345600010
12345600011
123456700010
123456700020
123456710010

Шаблон 1-данные (вариация 3-7-значное число) + 2-данные (любое 3-значное число) + 3-данные (любое 2-значное число)

Я хочу создать SQL для получения только 1-данных. Например я хочу получить данные 12345 Я хочу только результат

1234500010
1234500020
1234500021

Если я использую «лайк»,

select *
FROM data
where ID like '12345%' `

Я получу все данные с 12345, 123456 и 1234567

Если я использую равные, я получу только одну конкретную информацию.

Могу ли я объединить равные и равные вместе, чтобы получить результат, как я хочу?

выберите * ИЗ данных, где данные = '12345 + любые 2-данные (3 цифры) + любые 3-данные (2 цифры)'

Кто-нибудь может помочь?

Дополнение: Извините, если я не упомянул тип данных и сделал некоторые пропуски связи. Тип данных в char. @ Гордон отвечает, а остальные не ошибаются. Работает на номер и varchar. но не работает для типа char. Здесь я выкладываю картинку для типа данных char. Спецификация Oracle для типа данных char имеет фиксированную длину. Так что, если я введу меньше длины, то остаток будет изменен на пробел. all data result sql

Большое спасибо. Надеюсь, что кто-то может помочь в этом

Ответы [ 4 ]

0 голосов
/ 28 июня 2018

Поскольку ваш тип данных CHAR, ответ Гордона вам не подходит. CHAR добавляет конечные пробелы для строк меньше максимального предела. Вы можете использовать TRIM, чтобы исправить это, как показано на рисунке. Но вы должны хранить номер с типом NUMBER и не CHAR или VARCHAR2, что рано или поздно создаст другие проблемы.

select *
from data
where trim(ID) like '12345_____';
0 голосов
/ 28 июня 2018

Я думаю, что это дает вам решение, которое вы хотите,

create table data(ID number(15));

insert into data values(1234500010);

insert into data values(1234500020);

insert into data values(1234500021);

insert into data values(12345600010);

insert into data values(12345600011);

insert into data values(123456700010);

insert into data values(123456700020);

insert into data values(123456710010);

выберите * из данных, где идентификатор, например, '12345 _____'

// После 5_ подчеркивания ровно 5, любые 3 цифры из 2-х данных (3 подчеркивания) и 2 цифры из 3-х данных (2 подчеркивания)

Вы получите (ВЫХОД):

ID

1234500010

1234500020

1234500021

3 строки возвращаются за 0,00 секунд

0 голосов
/ 28 июня 2018

Вы действительно не можете объединить равенство и LIKE. Но вы можете использовать регулярное выражение для выполнения такого поиска с помощью функции REGEXP_LIKE:

SELECT *
  FROM DATA
  WHERE REGEXP_LIKE(ID, '^12345[0-9]{3}[0-9]{2}');

Но если я правильно понимаю, для ваших 1-данных вам действительно нужно число от 3 до 7 цифр:

SELECT *
  FROM DATA
  WHERE REGEXP_LIKE(ID, '^[0-9]{3,7}[0-9]{3}[0-9]{2}');

Документы по регулярным выражениям Oracle здесь

SQLFiddle здесь

Удачи.

0 голосов
/ 28 июня 2018

Я думаю, что вы хотите:

select *
from data
where ID like '12345_____'  -- exactly 5 _

Вот rextester , демонстрирующий ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...