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