Snowflake中BINARY类型(visitor_id)转VARCHAR/NUMERIC问题求助
解决方案
1. 转换为NUMERIC类型
你的visitor_id二进制字段本质是十六进制数值,直接使用TO_NUMERIC(或TO_NUMBER)并指定基数16即可完成转换:
SELECT visitor_id, TO_NUMERIC(TO_VARCHAR(visitor_id), 16) AS visitor_id_numeric FROM table_X;
如果数值超出普通NUMERIC的精度范围(比如你的十六进制字符串为32位,对应128位整数),可以指定更高精度的DECIMAL类型:
SELECT visitor_id, TO_DECIMAL(TO_VARCHAR(visitor_id), 16, 38) AS visitor_id_decimal FROM table_X;
2. 转换为VARCHAR类型(数值的字符串形式)
若需要得到十进制数值的字符串形式,可先将十六进制转换为数值,再转成VARCHAR:
SELECT visitor_id, TO_VARCHAR(TO_NUMERIC(TO_VARCHAR(visitor_id), 16)) AS visitor_id_varchar FROM table_X;
关于HEX_DECODE_STRING报错的原因
HEX_DECODE_STRING的作用是将十六进制字符串解码为UTF-8编码的文本,但你的二进制字段存储的是数值的十六进制表示,并非UTF-8编码的字符内容,因此解码时会触发非法UTF8的错误,该函数不适用你的场景。
内容的提问来源于stack exchange,提问作者S.MAHIOU
相关产品推荐
相关产品推荐

