Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 MS SQL - представить строку в виде выражения  [new]
kolbasometr
Member

Откуда:
Сообщений: 5
Добрый день.

Имеется столбец со строками, содержащими математические выражения. Например, '1+2+3'.
Как заставить SQL выполнить это выражение? Возможно ли это в принципе?
Запрос
SELECT 1+2+3
неявно преобразует данные к нужному типу, на выходе получаем желаемое 6.
равно как и
EXECUTE('SELECT 1+2+3')

Однако все попытки работать с имеющейся строкой
 '1+2+3' 
терпят неудачу:
EXECUTE('SELECT ''1+2+3''')
,
EXECUTE('SELECT ''SELECT 1+2+3''') 
и прочие
EXECUTE('SELECT a FROM (SELECT ''1+2+3'' AS a) T')
стабильно рисуют на выходе '1+2+3'

Подозреваю, что можно, наверное, решить через xml, но не ведаю, как.

MS SQL 2008 R2
1 июл 14, 03:59    [16241486]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL - представить строку в виде выражения  [new]
artny
Guest
declare @s varchar(50)
set @s = '1+2+3'
set @s = 'select ' + @s
exec (@s)
1 июл 14, 04:57    [16241499]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL - представить строку в виде выражения  [new]
kolbasometr
Member

Откуда:
Сообщений: 5
С переменной работает. А с таблицей - шиш :(
1 июл 14, 06:42    [16241528]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL - представить строку в виде выражения  [new]
kolbasometr
Member

Откуда:
Сообщений: 5
и да - я легко могу привести столбец к виду
'SELECT 1+2'
UNION
'SELECT 1+2+3'
UNION
'SELECT 1+2+3+4'

- если это поможет. Но пока отчего-то не помогает...
1 июл 14, 06:53    [16241537]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL - представить строку в виде выражения  [new]
AnyKey45
Member

Откуда: Ekaterinburg-Moscow-EU
Сообщений: 219
kolbasometr,

самый первый вариант который напрашивается - цикл?
1 июл 14, 07:18    [16241555]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL - представить строку в виде выражения  [new]
kolbasometr
Member

Откуда:
Сообщений: 5
AnyKey45
самый первый вариант который напрашивается - цикл?


Всё-таки надеюсь, что есть более изящное и экономичное решение.
1 июл 14, 07:58    [16241609]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL - представить строку в виде выражения  [new]
AnyKey45
Member

Откуда: Ekaterinburg-Moscow-EU
Сообщений: 219
kolbasometr,

а строк много?
1 июл 14, 08:14    [16241630]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL - представить строку в виде выражения  [new]
kolbasometr
Member

Откуда:
Сообщений: 5
AnyKey45,

Это несущественно. Я понимаю, к чему ты :)
Но задача должна решаться для любого количества строк.
И мне непонятно, почему набор символов, заданный явно, интерпретируется иначе, чем он же, взятый из поля таблицы.
Вернее, где и как задается и регулируется эта разница.
1 июл 14, 08:22    [16241637]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL - представить строку в виде выражения  [new]
DmitryVT
Member

Откуда: VRN
Сообщений: 192
Наверное вам разумнее написать функцию, которая будет выполнять определенные математические расчеты по вашему столбцу, и использовать ее в обычном SELECT.
1 июл 14, 08:31    [16241651]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL - представить строку в виде выражения  [new]
AnyKey45
Member

Откуда: Ekaterinburg-Moscow-EU
Сообщений: 219
kolbasometr,

может быть потому-то

SELECT 1+2+3                                      =select int+int+int
EXECUTE('SELECT ''1+2+3''')                       =execute(select nvarchar(max))
EXECUTE('SELECT ''SELECT 1+2+3''')                =execute(select nvarchar(max))
EXECUTE('SELECT a FROM (SELECT ''1+2+3'' AS a) T')=execute(select nvarchar(max))


попробуйте
EXECUTE('SELECT cast(''1'' as int)+cast(''2'' as int)+cast(''3'' as int)' )
1 июл 14, 08:34    [16241654]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL - представить строку в виде выражения  [new]
AnyKey45
Member

Откуда: Ekaterinburg-Moscow-EU
Сообщений: 219
AnyKey45,

человек принципиально пытается решить задачу реляционно, но мне кажется в данном случае это не получится

EXECUTE('SELECT cast(''1'' as int)+cast(''2'' as int)+cast(''3'' as int)' ) - не прокатывает в просто SELECT
1 июл 14, 08:39    [16241659]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL - представить строку в виде выражения  [new]
AnyKey45
Member

Откуда: Ekaterinburg-Moscow-EU
Сообщений: 219
AnyKey45,

ой - поспешил, мой вариант равен EXECUTE('SELECT 1+2+3')
1 июл 14, 08:41    [16241661]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить