雪花中的制表符缩进是否有特殊字符?
Is there a special character for tab indention in snowflake?
我需要计算雪花中字符串中的单词数。
问题是单词之间有空格,
品种数。
例如:
str = '67778 19gj5 7770 202ty524 2024 i900 3290 POC/*'
我想得到字数- 8。
我尝试了什么:
array_size(split(str, ' '))
return 27 :(
和
array_size(split(str, '\t'))
return 1.
有什么想法吗?
您可以使用 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;
备选方案:
- 使用 regex_replace 将所有出现的多个 space 替换为单个 space
- 使用单个 space 作为分隔符(即您最初尝试的)拆分字符串
这是@NickW 建议的实施,但有一些改进:
将所有连续的 whitespace 个字符 (\s+
) 替换为单个 space 并将其拆分,使用 array_size,它将适用于所有白色 space :spaces、制表符、换行符等:
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
我需要计算雪花中字符串中的单词数。 问题是单词之间有空格, 品种数。
例如:
str = '67778 19gj5 7770 202ty524 2024 i900 3290 POC/*'
我想得到字数- 8。
我尝试了什么:
array_size(split(str, ' '))
return 27 :(
和
array_size(split(str, '\t'))
return 1.
有什么想法吗?
您可以使用 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;
备选方案:
- 使用 regex_replace 将所有出现的多个 space 替换为单个 space
- 使用单个 space 作为分隔符(即您最初尝试的)拆分字符串
这是@NickW 建议的实施,但有一些改进:
将所有连续的 whitespace 个字符 (\s+
) 替换为单个 space 并将其拆分,使用 array_size,它将适用于所有白色 space :spaces、制表符、换行符等:
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