presto中grouping(substr(create_date_time, 12, 2))为什么报错
时间: 2024-02-17 09:03:11 浏览: 68
在Presto中,`substr()`函数的第二个参数是从字符串中提取的子字符串的起始位置,而不是子字符串的长度。因此,如果您想从`create_date_time`字段的第12个字符开始提取两个字符,您需要将第二个参数改为2,而不是12 + 2 = 14。另外,如果您想通过`substr()`函数从`create_date_time`字段中提取子字符串,首先需要确保这个字段是字符串类型,而不是日期时间类型。如果这个字段是日期时间类型,您需要使用日期时间函数将其转换为字符串类型,然后再使用`substr()`函数提取子字符串。
所以,正确的语法应该是:
```sql
SELECT grouping(substr(CAST(create_date_time AS varchar), 12, 2))) FROM your_table;
```
其中,`CAST(create_date_time AS varchar)`将`create_date_time`字段转换为字符串类型,然后使用`substr()`函数提取第12个字符开始的2个字符,并对其进行分组操作。
相关问题
presto中不支持date_sub吗
Presto是一款基于SQL的分布式查询引擎,它支持date_sub函数。date_sub函数用于计算指定日期的前一个日期或指定间隔时间之前的日期。
使用date_sub函数的语法如下:
```
date_sub(date, INTERVAL num unit)
```
其中,date参数表示要进行计算的日期,num参数表示要减去的时间数量,unit参数表示要减去的时间单位,如YEAR、MONTH、DAY等。
例如,要计算当前日期的前一天,可以使用以下语句:
```
SELECT date_sub(CURRENT_DATE, INTERVAL 1 DAY);
```
该语句将返回当前日期的前一天日期。
因此,你可以在Presto中使用date_sub函数来进行日期运算。
PRESTO regexp_substr
Presto是一个开源的列式SQL查询引擎,主要用于处理大规模数据集。`regexp_substr`是Presto中用于正则表达式分割字符串的一个函数。这个函数的作用类似于其他SQL系统中的`SUBSTRING`或`REGEXP_EXTRACT`,但它根据正则表达式的匹配来提取子串。
`regexp_substr`的基本语法如下:
```sql
regexp_substr(input_string, pattern, start_index, [occurrence])
```
- `input_string`: 需要被分割的原始字符串。
- `pattern`: 正则表达式模式,定义了要匹配和提取的模式。
- `start_index`: 提取的起始位置(从0开始计数)。如果为负值,表示从字符串末尾开始计算。
- `occurrence` (可选): 如果指定,表示第几个匹配的子串。默认值为1,表示第一个匹配;0表示所有匹配。
举个例子:
```sql
SELECT regexp_substr('Hello, World!', 'W', 1, 0); -- 提取第一个"World",结果为'World'
SELECT regexp_substr('Hello, World!', 'W', 1, 1); -- 提取第二个"W",在逗号后面,结果为空字符串 ''
```
阅读全文