雪花中的制表符缩进是否有特殊字符?

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_TABLECOUNT_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;

备选方案:

  1. 使用 regex_replace 将所有出现的多个 space 替换为单个 space
  2. 使用单个 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