Форум программистов, компьютерный форум, киберфорум
Oracle
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
87 / 30 / 19
Регистрация: 16.01.2015
Сообщений: 250

Вывести записи у которых первые 3 символа одинаковые

04.12.2015, 08:51. Показов 2125. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйста какой будет запрос для того, чтобы вывести все записи, у которых первые 3 символа в поле одинаковые.
Читал темы с дубликатами, но это немного не подходит. Не пойму как выделить именно первые 3 символа.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.12.2015, 08:51
Ответы с готовыми решениями:

Вывести те слова, у которых одинаковые первые буквы
Помогите пожалуйста 1.Научиться оперировать со строковыми массивами: Вывести те слова, у которых одинаковые первые буквы 2.Научиться...

Вывести те слова, у которых одинаковые первые буквы на VBA
Вывести те слова, у которых одинаковые первые буквы на VBA с помощью строковых массивов

Вывести первые записи в цикле у которых самый младший id по
Как составить такой запрос на выборку, например нужно вытащить первые фотографии товара у которых самый младший по значению id по...

8
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
04.12.2015, 09:36
Цитата Сообщение от Hikaru Посмотреть сообщение
Не пойму как выделить именно первые 3 символа
SUBSTR
1
765 / 666 / 194
Регистрация: 24.11.2015
Сообщений: 2,163
04.12.2015, 10:24
А я не пойму, что надо сделать в задаче: найти записи, у которых первых три символа равны трем предопределенным (заданным) символам, или разбить всю совокупность записей в таблице на группы из записей так, чтобы внутри группы первые три символа были равны?

Прошу уточнить условие
0
87 / 30 / 19
Регистрация: 16.01.2015
Сообщений: 250
04.12.2015, 12:06  [ТС]
AGK, Есть поле с именами

Вадим
Валентин
Валерий
Валерьян
Вальдемар
Варлам

и сделать запрос нужно, чтобы вывелись записи, если у них одинаковые первые 3 символа, не указывая какие именно. В этом примере все "Вал..", если добавить ещё кого-то с "вар", то выведется 4 имени с Вал и 2 с Вар.
0
765 / 666 / 194
Регистрация: 24.11.2015
Сообщений: 2,163
04.12.2015, 12:55
Лучший ответ Сообщение было отмечено Hikaru как решение

Решение

Я писал в Oracle 11, но аналитические функции, по-моему, уже в 9-ке были
SQL
1
2
3
4
5
6
SELECT dense_rank() OVER (ORDER BY substr(name, 1,3)) nn,
       ROW_NUMBER() OVER (PARTITION BY substr(name, 1,3) ORDER BY name) mm,
       substr(name,1,3) grp,
       name
FROM TABLE_NAME
ORDER BY nn, mm;
Первый столбец - номер группы, второй столбец - номер в группе, третий солбец - одинаковая группа символов, четвертый столбец - само базовое поле. Дальше можно заключить во внешний селект и выбать, например, 7 группу. Или еще что-нибудь сделать

Добавлено через 9 минут
Если надо, чтобы в группе не было повторений, то можно так
SQL
1
2
3
4
5
6
SELECT DISTINCT dense_rank() OVER (ORDER BY substr(name, 1,3)) nn,
       dense_rank() OVER (PARTITION BY substr(name, 1,3) ORDER BY name) mm,
       substr(name,1,3) grp,
       name
FROM TABLE_NAME
ORDER BY nn, mm;
Добавлено через 15 минут
Еще раз перечитал Ваше сообщение. В моих терминах это звучит так, что группы надо выводить в том случае, если в них более одной записи. Причем, раз о повторяемости записей ничего не сказано, то будем считать, что записи в группе могут повторяться, и в этом случае их тоже надо выводить
SQL
1
2
3
4
5
6
7
8
9
SELECT nn, mm, grp, name FROM (
SELECT dense_rank() OVER (ORDER BY substr(name, 1,3)) nn,
       ROW_NUMBER() OVER (PARTITION BY substr(name, 1,3) ORDER BY name) mm,
       substr(name,1,3) grp,
       COUNT(*) OVER (ORDER BY substr(name, 1,3)) cnt,
       name
FROM TABLE_NAME
) WHERE cnt>1
ORDER BY nn, mm;
Добавлено через 5 минут
А если я все-таки предположил неверно, и повторения надо убирать и схлопывать, то будет так
SQL
1
2
3
4
5
6
7
8
9
SELECT nn, mm, grp, name FROM (
SELECT DISTINCT dense_rank() OVER (ORDER BY substr(name, 1,3)) nn,
       dense_rank() OVER (PARTITION BY substr(name, 1,3) ORDER BY name) mm,
       substr(name,1,3) grp,
       COUNT(DISTINCT name) OVER (ORDER BY substr(name, 1,3)) cnt,
       name
FROM TABLE_NAME
) WHERE cnt>1
ORDER BY nn, mm;
1
105 / 49 / 26
Регистрация: 01.09.2014
Сообщений: 140
04.12.2015, 13:00
SQL
1
2
3
4
5
6
7
8
WITH t AS (SELECT 'asdfasdfasdf' txt FROM dual UNION 
SELECT 'asdfasdffdsadf gfd' txt FROM dual UNION
SELECT '11aadsfa222dfgfdg' txt FROM dual UNION
SELECT 'bbbgdfsgsdfgdfg' txt FROM dual) 
 
SELECT *
FROM t
WHERE REGEXP_LIKE(txt,'^([a-z 0-9])\1{2}')
0
765 / 666 / 194
Регистрация: 24.11.2015
Сообщений: 2,163
04.12.2015, 13:20
Лучший ответ Сообщение было отмечено Hikaru как решение

Решение

Во-первых, нашел у себя опечатку, увы. Во всех count должно быть не ORDER BY, а PARTITION BY.
Во-вторых, Lorsik, увы, но Ваш селект выводит стороки, если в них троекратно повторяется в начале один и тот же символ, в данном случае выводится
bbbgdfsgsdfgdfg

А мой (исправленный) последний селект
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
WITH t AS (
    SELECT txt AS name FROM (
    SELECT 'asdfasdfasdf' txt FROM dual 
    UNION ALL
    SELECT 'asdfasdffdsadf gfd' txt FROM dual 
    UNION ALL
    SELECT '11aadsfa222dfgfdg' txt FROM dual 
    UNION ALL
    SELECT 'bbbgdfsgsdfgdfg' txt FROM dual)
)
SELECT /*nn, mm, grp,*/ name 
FROM (
SELECT DISTINCT dense_rank() OVER (ORDER BY substr(name, 1,3)) nn,
       dense_rank() OVER (PARTITION BY substr(name, 1,3) ORDER BY name) mm,
       substr(name,1,3) grp,
       COUNT(DISTINCT name) OVER (PARTITION BY substr(name, 1,3)) cnt,
       name
FROM t
) WHERE cnt>1
ORDER BY nn, mm;
в тех же условиях ( с тем же with) выведет
asdfasdfasdf
asdfasdffdsadf gfd

Почувствуйте разницу
1
105 / 49 / 26
Регистрация: 01.09.2014
Сообщений: 140
04.12.2015, 13:46
Лучший ответ Сообщение было отмечено Hikaru как решение

Решение

Мда уж, недоглядел)
Тогда как вариант

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
WITH t AS (
    SELECT txt AS name FROM (
    SELECT 'asdfasdfasdf' txt FROM dual 
    UNION ALL
    SELECT 'asdfasdffdsadf gfd' txt FROM dual 
    UNION ALL
    SELECT '11aadsfa222dfgfdg' txt FROM dual 
    UNION ALL
    SELECT 'bbbgdfsgsdfgdfg' txt FROM dual)
)
 
SELECT *
FROM t
WHERE substr(name,1,3) IN ( 
    SELECT 
        substr(name,1,3) 
    FROM t 
    GROUP BY substr(name,1,3) 
    HAVING COUNT(*) > 1
)
1
765 / 666 / 194
Регистрация: 24.11.2015
Сообщений: 2,163
04.12.2015, 13:56
Да, согласен. У меня просто некая боевая раскраска дикаря присутствует. Поскольку при написании не до конца понимал, что может пригодиться
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.12.2015, 13:56
Помогаю со студенческими работами здесь

Вывести все четырехзначные числа в диапазоне от A до B, в записи которых есть 3 одинаковые цифры
Написал данную программу, но не могу понять, куда нужно вставить условие для промежутка (чтобы при выходе за промежуток выдавало сообщение...

Вывести на экран все 3-значные числа, в записи которых используется одинаковые цифры
Вывести на экран все 3-значные числа, в записи которых используется одинаковые цифры. Найти их сумму. Использовать процедуру пользователя.

Одинаковые первые 4 записи в DBLookupComboBox
https://www.cyberforum.ru/attachments/390685d1398161630 Код в IBDataSet: SELECT abonent.*,...

Найти слова, в которых одинаковые первые три буквы!
Дана строка символов S, длиной n. Слова разделены пробелами, в конце точка. Найти слова, в которых одинаковые первые три буквы. Вводить...

Склейка полей, в которых одинаковые первые 2 цифры, с разделом на месяца
Всем привет! Имеется таблица, где в одном поле данные хранятся в виде: 02, 02-09, 02-10, 04, 04-02, 05, 05-06. Каждому значению...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru