[OLAP] Clickhouse 函数

1 进制转换类函数

16进制与10进制间的转换

  • 综合案例
select 
	-- 17990 = 0x4646 = [52, 54, 52, 54] (ASCII码,10进制) = [0x34, 0x36, 0x34 , 0x36] (ASCII码,16进制)

	hex('4646')          -- out : String ASCII值 16进制拼接 = '34363436' | String 16进制字符串 = '4646'
	, hex(17990)         -- out : String 16进制字符串 = '4646' | in : Int 10进制 = 17990
	, unhex('34363436')  -- out : String 16进制字符串 = '4646' | in : String ASCII值 16进制拼接 = '34363436'
  • hex(String|unsigned integer|Date|DateTime) : String
  • 接受Stringunsigned integerDateDateTime类型的参数。
  • 返回:包含参数的十六进制表示的字符串。
  • 使用大写字母A-F。不使用0x前缀或h后缀。
  • 对于字符串,所有字节都简单地编码为两个十六进制数字。
  • 数字转换为大端(«易阅读»)格式。
  • 对于数字,去除其中较旧的零,但仅限整个字节。例如,hex(1)='01'。
  • Date被编码为自Unix时间开始以来的天数。
  • DateTime编码为自Unix时间开始以来的秒数。
  • unhex(String)
  • 接受包含任意数量的十六进制数字的字符串,并返回包含相应字节的字符串。
  • 支持大写和小写字母A-F。
  • 十六进制数字的数量不必是偶数。

如果是奇数,则最后一位数被解释为00-0F字节的低位。

  • 如果参数字符串包含除十六进制数字以外的任何内容,则返回一些实现定义的结果(不抛出异常)。
  • 如果要将结果转换为数字,可以使用«reverse»和«reinterpretAsType»函数。

X 参考文献

posted @ 2024-06-26 11:33  千千寰宇  阅读(3)  评论(0编辑  收藏  举报