В MySQL вы действительно не можете динамически вычислять строки как код SQL, так как это может представлять собой серьезную проблему с безопасностью. Однако есть несколько подходов, которые вы можете использовать, чтобы обойти это ограничение.
### 1. Использование хранимых процедур
Вы можете создать хранимую процедуру, которая принимает формулу в виде строки и заменяет значения в формуле на фактические значения. Затем вы можете выполнить выражение с использованием динамического SQL.
Пример:
```sql
DELIMITER //
CREATE PROCEDURE CalculateFormula(IN formula VARCHAR(255), IN rate DECIMAL(10, 2), OUT result DECIMAL(10, 2))
BEGIN
SET @query = REPLACE(formula, 'USD', rate);
SET @query = REPLACE(@query, '=', ''); -- Убираем символ равенства, если есть
SET @query = CONCAT('SELECT ', @query);
PREPARE stmt FROM @query;
EXECUTE stmt INTO result;
DEALLOCATE PREPARE stmt;
END //
DELIMITER ;
```
Вызов процедуры через `CALL`:
```sql
CALL CalculateFormula('= 3*USD + 2', 0.30, @result);
SELECT @result;
```
### 2. Выполнение в приложении
Если у вас есть доступ к приложению, вы можете извлекать данные из базы данных с формулами, затем обрабатывать формулы на стороне приложения. Это даст больше гибкости и безопасности.
Пример на Python:
```python
import sqlite3 # или другой драйвер для MySQL
# Получите формулу из базы данных
cursor.execute("SELECT formula FROM your_table WHERE id = ?", (some_id,))
formula = cursor.fetchone()[0]
# Замените USD на его значение
rate = 0.30
eval_formula = formula.replace('USD', str(rate)).replace('=', '')
# Вычислите результат
result = eval(eval_formula)
```
Избегайте использования `eval` с неопознанным вводом, так как это может быть небезопасно.
### 3. Реализация простого парсера формул
Если ваши формулы достаточно просты, вы можете реализовать базовый парсер выражений с поддержкой основных операций. Примеры библиотек, которые могут помочь, включают `parse` или `numpy` для Python.
---
Каждый из этих подходов имеет свои преимущества и недостатки, и лучший выбор зависит от ваших конкретных потребностей и контекста, в котором вы работаете.