【问题标题】:Is there a special character for tab indention in snowflake?雪花中的制表符缩进是否有特殊字符?
【发布时间】:2021-05-25 16:46:16
【问题描述】:
我需要在雪花中计算字符串中的单词。
问题是单词之间有空格,
在品种计数中。
例如:
str = '67778 19gj5 7770 202ty524 2024 i900 3290 POC/*'
我想得到字数- 8。
我尝试了什么:
array_size(split(str, ' '))
返回 27 :(
和
array_size(split(str, '\t'))
返回 1。
有什么想法吗?
【问题讨论】:
标签:
sql
snowflake-cloud-data-platform
trim
space
【解决方案1】:
这是@NickW 建议的实施,有一些改进:
用单个空格替换所有连续的whitespace 字符 (\\s+) 并将其拆分,使用 array_size,它将适用于所有空格:空格、制表符、换行符等:
WITH t1 AS (
select '67778 19gj5 7770 202ty524 2024 i900 3290 POC/*' as str
)
select array_size(split(regexp_replace(str, '\\s+',' '),' ')) num_words
from t1
结果:
NUM_WORDS
8
【解决方案2】:
替代解决方案:
- 使用 regex_replace 将所有出现的多个空格替换为单个空格
- 使用单个空格作为分隔符拆分字符串(即您最初尝试的内容)
【解决方案3】:
您可以使用SPLIT_TO_TABLE 和COUNT_IF:
CREATE OR REPLACE TABLE t AS
SELECT '67778 19gj5 7770 202ty524 2024 i900 3290 POC/*' AS str;
查询:
SELECT STR, COUNT_IF(s.VALUE != '') AS num_of_words
FROM t,
LATERAL SPLIT_TO_TABLE(t.str, ' ')s
GROUP BY STR;
输出:
STR num_of_words
67778 19gj5 7770 202ty524 2024 i900 3290 POC/* 8
编辑:
或者使用REGEXP_COUNT:
SELECT *, REGEXP_COUNT(str, '\\b\S+\\b') AS num_of_words
FROM t;