2012-02-09 1 views
2
Select table1.column1, table2.column1, calcuate(table1.column2) as result 
from table1, table2 
where table1.id = table2.fkid 

Скажите table1.column2 является varchar, а значение равно "= table1.column1 * table2.column1". Я хочу, чтобы мой запрос действительно вычислял эту формулу, а не возвращал текст. Мысли?Как я могу вычислить формулу в поле, возвращаемом запросом?

+2

Вы должны будете использовать некоторые [динамический SQL] (http://www.sommarskog.se/dynamic_sql.html) в вытащите это. –

+0

Я не думаю, что это возможно в T-SQL (или любом другом диалекте SQL, который я знаю). – bfavaretto

+1

Я категорически не рекомендую использовать этот метод. База данных предназначена для CRUD. В приложении должно быть сделано что-либо другое. – Oybek

ответ

2

Насколько я знаю, в SQL нет ничего похожего на оценку JavaScript. Если у вас есть только несколько формул, вы можете попробовать CASE-переключатель в своем SQL. Но в целом вы, возможно, должны переосмыслить свои заявления Architecure - SQL, которые трудно поддерживать, если у вас есть изменения. (И вы всегда должны ожидать изменения ...)

Пример:

 
Select 
    a.column1, 
    b.column1, 
    CASE 
    WHEN b.column2 = 'Multiply' THEN a.column1 * b.column1 
    WHEN b.column2 = 'Divide' THEN a.column1/b.column1 
    ELSE 0 
    END 
from table1 a, table2 b 
where a.id = b.fkid 
0

В MSSQL у вас есть команда EXEC, но в MySQL у вас ее нет. У вас есть 2 варианта:

  • Создать первый запрос, извлечь вашу формулу, а затем построить запрос динамически (может я поднимаю предупреждение о безопасности/SQL Injection)
  • Создать хранимую процедуру: http://forums.mysql.com/read.php?98,152150,152161#msg-152161
Смежные вопросы