【问题标题】:pass a variable to predefined function sybase/sql将变量传递给预定义函数 sybase/sql
【发布时间】:2015-07-02 17:04:55
【问题描述】:

我是 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”。你能帮忙吗?

【问题讨论】:

    标签: sql sybase sap-iq


    【解决方案1】:

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

    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
    

    【讨论】:

    • 感谢您的回复。我的列是代表十六进制值的字符串。格式是这样的:“14c9d0742dc”之前没有“0x”。第二个代码只返回 null...
    • 您需要从中读取包含“START_TIME”列的表的名称是什么?
    • 确实是“table_raw”。我只是想演示一下上面的案例。
    • 然后我更新了上面的 SELECT 语句来使用这个表,它应该也适合你。
    • 尝试使用动态 SQL(请参阅上面的编辑答案以及使用动态 SQL 的替代方法。这可能对您有用,
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    相关资源
    最近更新 更多