Hive substr 函数启动索引问题

Aid*_*den 5 hiveql apache-spark

我在 Apache spark 1.6.2 中使用 hive 2.11(hive 上下文)。我正在观察 hive substr 函数的意外行为。

文档说:-

substr(string|binary A, int start, int len) substring(string|binary A, int start, int len) 返回 A 的字节数组的子字符串或切片,从起始位置开始,长度为 len。例如, substr('foobar', 4, 1) 结果为 'b'(参见 [ http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_substr])。

我的观察:-

1. select substr('Sakila' ,0,3) from <table>; => returns 'Sak'

2. select substr('Sakila' ,1,3) from <table>; => returns 'Sak'
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:-

  1. 我的起始索引是 0 还是 1?
  2. 这是一个已知问题吗?

我尝试在此处执行上述查询:http : //demo.gethue.com/beeswax/#query 但得到了相同的结果。

Den*_*din 5

正如您在 foobar 示例中看到的,第一个字母的索引是 1。

如果您有一个非正数 m,则您的子字符串将从 1 的“左侧”m 个位置开始。

例子:

select substring('abcdefgh',-1,3)
h
Run Code Online (Sandbox Code Playgroud)

从这个角度来看,您可以看到 1 左边的 0 个位置仍然是 1,因此命令给出相同的结果。