передать переменную предопределенной функции sybase/sql

Я новичок в языке sql, и я был бы признателен за вашу помощь. Я хочу передать переменную (т. е. столбец) в предопределенную функцию, например «конвертировать» или «шестнадцатеричный».

select hextobigint('14c9d0742dc') 

возвращает 1428563641052

тем временем приведенный ниже код не выполняется ()

begin 
declare @st varchar(16); 
set @st=dc.table.START_TIME;
select hextobigint('dc.table.START_TIME') FROM dc.table; 
end

Ошибка

Корреляционное имя "таблица" не найдено.

Также для функции возвращается правильное значение:

select convert (bigint,0x14c9d0742dc)

но

select convert (bigint,14c9d0742dc)

не

Синтаксическая ошибка «c9d0742dc» в строке 1.

также

select convert(bigint,dc.table.START_TIME) FROM dc.table

возвращает только null, потому что формат столбца похож на «14c9d0742dc».

Область состоит в том, чтобы передать переменную (столбец) в эти функции "hextobigint" и "convert". Не могли бы вы помочь?


person Ardit    schedule 24.04.2015    source источник


Ответы (1)


Вы не можете преобразовать буквенно-цифровое число в bigint с помощью приведенного выше оператора преобразования. Таким образом, вам нужно будет изменить преобразование, чтобы сначала преобразовать Hex в Int. Но тогда вам не нужен оператор convert, так как следующие две строки возвращают одно и то же значение. Так что используйте только второй.

select convert (bigint,hextobigint('0x14c9d0742dc'));
select hextobigint('0x14c9d0742dc');

Что касается вашей первой проблемы, синтаксис неверен, но я не уверен, что вы пытаетесь вернуть. Если вы хотите преобразовать столбец START_TIME из таблицы с именем yourTableName, вы можете сделать это.

begin 

select hextobigint(START_TIME) FROM table_raw; 

end

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

begin 
declare @sql varchar(200);
EXECUTE IMMEDIATE WITH RESULT SET ON 'select hextobigint(START_TIME) FROM table_raw;';
end
person Kevin Horgan    schedule 24.04.2015
comment
Благодарю за ваш ответ. мой столбец находится в строке, которая представляет значение HEX. формат такой: 14c9d0742dc без 0x до. второй код возвращает только null... - person Ardit; 24.04.2015
comment
Как называется таблица, из которой нужно прочитать столбец START_TIME? - person Kevin Horgan; 24.04.2015
comment
Действительно, это table_raw. Я просто хотел продемонстрировать случай выше. - person Ardit; 24.04.2015
comment
Затем я обновил инструкцию SELECT выше, чтобы использовать эту таблицу, и она должна работать и для вас. - person Kevin Horgan; 24.04.2015
comment
Отлично, сработало! Последняя вещь. Могу ли я сделать это, используя только функцию преобразования, как в бизнес-аналитике, из которой я запускаю запрос, доступна только функция преобразования (нет hextobigint). - person Ardit; 24.04.2015
comment
Попробуйте использовать динамический SQL (см. отредактированный ответ выше с альтернативным использованием динамического SQL. Это может сработать для вас, - person Kevin Horgan; 24.04.2015