Я пытаюсь создать сценарий 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. Это мой ожидаемый результат:
В 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.
Это сработало! Спасибо. Я попытался использовать REGEXP @investment_code с моим исходным параметром, но результат все равно был пустым. Теперь, после прочтения вашего комментария, после «^ABC[0-9]+» добавлен символ «$», и все работает!
Вы можете попробовать оператор REGEXP вместо LIKE.
REGEXP 'ABC[0-9]'
Обратите внимание, что Генеративный ИИ (например, ChatGPT) запрещен , и прочтите Справочный центр: Политика ИИ. Запрещено использовать инструменты искусственного интеллекта для создания или изменения содержания контента, который вы публикуете в Stack Overflow.