С Новым годом! Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
2 / 2 / 1
Регистрация: 16.04.2022
Сообщений: 1,016

Корректный поиск

23.05.2024, 11:59. Показов 513. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Есть такой запрос
SQL
1
2
3
4
5
6
7
8
SELECT DISTINCT
    [column3]
FROM
    test.myTable1
WHERE
    [column1] = 1234
    AND
    [column3] LIKE 'Abcd%';
Выводит такой результат
column3
Abcd 1M'22
Abcd 9M'22
Abcd 10M'22
Abcd 1M'23
Abcd 1M'24
Abcd 1M'24 (cdef ghij)
Abcd 1M'24 (cdef ghklm)
Abcd 1M'24 (cdef ab'c)

Проблема заключается в следующем. После 'Abcd ' следует номер месяца (одна или две цифры), а потом символ 'М', которая встречается либо как русская, либо как английская. А также одинарная кавычка бывает после символа 'M' бывает разная.

Для того, чтобы отловить такие моменты пишу код так
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT
    [column3]
    ,CASE WHEN CHARINDEX('M', [column3]) > 0 THEN 1 ELSE 0 END AS ['M' как английская]
    ,CASE WHEN CHARINDEX('М', [column3]) > 0 THEN 1 ELSE 0 END AS ['М' как русская]
    ,CASE WHEN CHARINDEX(CHAR(39), [column3]) > 0 THEN 1 ELSE 0 END AS [символ CHAR(39)]
    ,CASE WHEN CHARINDEX(CHAR(146), [column3]) > 0 THEN 1 ELSE 0 END AS [символ CHAR(146)]
FROM
    (SELECT DISTINCT
        [column3]
    FROM
        test.myTable1
    WHERE
        [column1] = 1234
        AND
        [column3] LIKE 'Abcd%'
    ) t;
Но такой код не учитывает позицию. То есть может быть два русских символа 'М', или два английских символа 'М', или есть и русская и английская 'М', или одинарные кавычки встречаются два раза, или одинарные кавычки разные.

Скажите, как правильно написать так, чтоб было как по шаблону? Шаблон такой [Abcd 1M'22] и [Abcd 10M'23].
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.05.2024, 11:59
Ответы с готовыми решениями:

Не корректный синтаксис SET
Добрый день.Поготие разобраться, в чем ошибка в запросе SqlCommand cmd2 = new SqlCommand("insert into tblEvents(TimeI, TimeOu,...

Создать корректный запрос
Создаю корректный запрос, но не понимаю как из полученной таблицы найти наиболее часто встречающееся значение определённой колонки,...

Корректный синтаксис функции "CREATE GENERATOR"
Как в MS SQL Server Manegment Studio 2012 правильно задать запрос по созданию генерации последовательных чисел на примере функции...

9
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
23.05.2024, 12:32
T-SQL
1
[column3] like 'Abcd [1-9][MМ]%' or [column3] like 'Abcd 1[0-2][MМ]%'
если кавычка всегда есть после М хоть одинаковая, хоть разная, то можно и ее в условие засунуть сдвоив
1
2 / 2 / 1
Регистрация: 16.04.2022
Сообщений: 1,016
23.05.2024, 13:05  [ТС]
А как правильнее написать чтобы указать номер символа?
SQL
1
,CASE WHEN [column3] LIKE 'Abcd [1-9][char(77)]%' OR [column3] LIKE 'Abcd 1[0-2][char(77)]%' THEN 1 ELSE 0 END AS ['M' как английская]
0
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
23.05.2024, 13:18
чего [MМ] не подходит? там и латиница и кириллица.
а так как хочешь строку же нужно сформировать 'Abcd [1-9]['+char(77)+']%'
1
2 / 2 / 1
Регистрация: 16.04.2022
Сообщений: 1,016
23.05.2024, 13:27  [ТС]
Цитата Сообщение от Аватар Посмотреть сообщение
чего [MМ] не подходит? там и латиница и кириллица.
И такой подходит
а так как хочешь строку же нужно сформировать 'Abcd [1-9]['+char(77)+']%'
Хотел узнать как можно было написать, если указывать номер символа.

Добавлено через 2 минуты
Вот только приходится две записи делать: [1-9] и 1[0-2]. Похоже в регулярке это не объединить.
0
932 / 365 / 43
Регистрация: 10.05.2021
Сообщений: 1,564
Записей в блоге: 10
23.05.2024, 13:46
Цитата Сообщение от MConst Посмотреть сообщение
Похоже в регулярке это не объединить.
в регулярке это объединяется элементарно, вот только маска поиска Like в SQL — это простейший поиск по [относительно] примитивным шаблонам, что ОЧЕНЬ ДАЛЕКО от RegExp.

Цитата Сообщение от MConst Посмотреть сообщение
char(77)
не спутайте Char() с NChar(). Рекомендую вторую функцию (за счёт однозначности, универсальности и максимального диапазона символов) и сам использую только её.
А ещё есть ASCII()
0
2 / 2 / 1
Регистрация: 16.04.2022
Сообщений: 1,016
23.05.2024, 15:14  [ТС]
Почему то для поиска одинарных кавычек не работает
SQL
1
2
3
,CASE
    WHEN [column3] LIKE 'Abcd [1-9][.]['+CHAR(39)+']%' OR [column3] LIKE 'Abcd 1[0-2][.]['+CHAR(39)+']%' THEN 1 ELSE 0 END AS [символ CHAR(39)]
    WHEN [column3] LIKE 'Abcd [1-9][.]['+CHAR(146)+']%' OR [column3] LIKE 'Abcd 1[0-2][.]['+CHAR(146)+']%' THEN 1 ELSE 0 END AS [символ CHAR(146)]
[.] - это любой один символ, в данном случае это М либо как русская, или английская. А если заменить на
SQL
1
[МM]
или
SQL
1
['+char(39)+'|'+char(146)+']
то работает.

Добавлено через 20 минут
Как правильно написать?
0
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
23.05.2024, 15:29
Цитата Сообщение от MConst Посмотреть сообщение
Как правильно написать?
https://learn.microsoft.com/ru... rver-ver16
0
932 / 365 / 43
Регистрация: 10.05.2021
Сообщений: 1,564
Записей в блоге: 10
23.05.2024, 15:31
Цитата Сообщение от MConst Посмотреть сообщение
[.] - это любой один символ
Это вы сами так решили? Читаем.
0
2 / 2 / 1
Регистрация: 16.04.2022
Сообщений: 1,016
23.05.2024, 15:35  [ТС]
упппс, перепутал, надо было так
SQL
1
2
3
,CASE
    WHEN [column3] LIKE 'Abcd [1-9]_['+CHAR(39)+']%' OR [column3] LIKE 'Abcd 1[0-2]_['+CHAR(39)+']%' THEN 1 ELSE 0 END AS [символ CHAR(39)]
    WHEN [column3] LIKE 'Abcd [1-9]_['+CHAR(146)+']%' OR [column3] LIKE 'Abcd 1[0-2]_['+CHAR(146)+']%' THEN 1 ELSE 0 END AS [символ CHAR(146)]
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.05.2024, 15:35
Помогаю со студенческими работами здесь

Корректный поиск однофамильцев в базе
Добрый день! Помогите, пожалуйста, как правильно создать базу данных, чтобы получать корректные данные по людям, если среди них есть...

Формат поля или корректный поиск с заменой
Добрый день. Необходимо произвести поиск и замену слова. Но возникают сложности. Если делать через Конструктор->Обновление, то не...

Расчет стажа - Не корректный
Здравствуйте и Всем Доброго дня! Тут у меня при заполнении БД скоропостижно вскочил вопрос, типа вылезла ошибочка. :( При вычислении...

Корректный вывод данных
Здравствуйте Моя проблемка заключается вот в чем: данные из БД выводятся вот в таком виде: а надо, чтобы выводились...

Как написать корректный запрос-обьединение?
Всем привет, есть две таблицы (см вложения): Столбец corr_id связан с author_id при создании таблиц. Впрочем не суть. Мне нужно...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru