【问题标题】: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】:

      替代解决方案:

      1. 使用 regex_replace 将所有出现的多个空格替换为单个空格
      2. 使用单个空格作为分隔符拆分字符串(即您最初尝试的内容)

      【讨论】:

        【解决方案3】:

        您可以使用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;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-03-31
          • 2020-04-26
          • 2015-11-04
          • 1970-01-01
          • 2020-10-12
          • 1970-01-01
          • 2020-02-06
          相关资源
          最近更新 更多