Как я могу установить числовой подстановочный знак в MySQL?

Я пытаюсь создать сценарий SQL, который находит коды в двух разных базах данных. Я хочу установить параметр с числовым подстановочным знаком.

Коды часто пишутся так, например, ABC108, ABC109, DEF47213 и т. д. Я установил параметр как ABC[0-9]+, чтобы вернуть все возможные варианты кодов, которые начинаются с ABC, но в результате вывод был пустым.

Я попробовал следующее, ожидая, что будет выведен самый последний код, созданный в обеих базах данных:

SET @investment_code = 'ABC[0-9]+';

SELECT 
    investment_name, 
    i.service_client_id, 
    currency_symbol, 
    investment_code C_investment_codes
FROM client.investments i
LEFT JOIN client.currencies c
    ON i.currency_id = c.id
WHERE i.investment_code COLLATE utf8mb4_unicode_ci LIKE @investment_code
ORDER BY investment_code DESC
LIMIT 1;

SELECT 
`key`, 
service_client_id, 
`value` SD_investment_codes
FROM client_data.standing_data sd
WHERE sd.`value` COLLATE utf8mb4_unicode_ci LIKE @investment_code
ORDER BY `value` DESC
LIMIT 1;

Это привело к пустому выводу. Когда я использую SET @investment_code = 'ABC%';, я получаю результаты, но я специально хочу установить параметр, чтобы цифры следовали ABC. Это мой ожидаемый результат:

C_investment_codes SD_investment_codes АВС109 АВС109
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
2
0
74
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

В MySQL оператор LIKE не поддерживает регулярные выражения напрямую. Вместо этого вы можете использовать подстановочный знак % для соответствия любой последовательности символов.

Для вашего сценария вы можете использовать оператор REGEXP, доступный в MySQL, который позволяет использовать регулярные выражения. Вот пример

SET @investment_code = '^ABC[0-9]+$';

SELECT 
    investment_name, 
    i.service_client_id, 
    currency_symbol, 
    investment_code AS C_investment_codes
FROM client.investments i
LEFT JOIN client.currencies c
    ON i.currency_id = c.id
WHERE i.investment_code REGEXP @investment_code
ORDER BY investment_code DESC
LIMIT 1;

table
SELECT 
    `key`, 
    service_client_id, 
    `value` AS SD_investment_codes
FROM client_data.standing_data sd
WHERE sd.`value` REGEXP @investment_code
ORDER BY `value` DESC
LIMIT 1;

Обратите внимание, что Генеративный ИИ (например, ChatGPT) запрещен , и прочтите Справочный центр: Политика ИИ. Запрещено использовать инструменты искусственного интеллекта для создания или изменения содержания контента, который вы публикуете в Stack Overflow.

DarkBee 24.07.2024 20:47

Это круто. Однако мой ответ слишком краток и груб, чтобы быть ответом ChatGPT.

Peabody jr. 24.07.2024 20:52

Это сработало! Спасибо. Я попытался использовать REGEXP @investment_code с моим исходным параметром, но результат все равно был пустым. Теперь, после прочтения вашего комментария, после «^ABC[0-9]+» добавлен символ «$», и все работает!

Odi 24.07.2024 21:34

Вы можете попробовать оператор REGEXP вместо LIKE.

REGEXP 'ABC[0-9]'

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