将变量传递给预定义函数sybase / sql

时间:2015-04-24 07:46:04

标签: sql sybase sybase-iq

我是sql语言的新手,我很感激你的帮助。我想将变量(即列)传递给预定义的函数,如“convert”或“hextobigint”。

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)

没有

  

第1行的语法错误'c9d0742dc'。

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

仅返回null,因为列的格式类似于“14c9d0742dc”。

范围是将变量(列)传递给这些函数“hextobigint”和“convert”。你能帮忙吗?

1 个答案:

答案 0 :(得分:2)

您无法使用上面的convert语句将字母数字转换为bigint。因此,您需要将转换更改为首先将Hex转换为Int。但是,您不需要convert语句,因为以下两行返回相同的值。所以只需使用第二个。

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

关于你的第一个问题,语法是错误的,但我不确定你想要什么回来。如果要从名为“yourTableName”的表中转换列START_TIME,则可以执行此操作。

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