Teradata 如何计算字符串中的逗号数?

Teradata 如何计算字符串中的逗号数?,teradata,Teradata,我使用teradata。无法访问函数、UDF和存储过程 桌子 我需要计算属性的数量 id att_number 1 2 2 3 3 2 4 2 5 1 如何执行此操作?仅使用索引和子字符串函数,您需要一个嵌套的case语句来检查最多12个属性,如下所示。您需要进一步嵌套case语句,使其最多可以计数12个属性,目前它最多只能计数2个属性。[注:mytext=属性] SELECT id, mytext ,case when index(mytext, ',')= 0 th

我使用teradata。无法访问函数、UDF和存储过程

桌子

我需要计算属性的数量

id  att_number
1   2
2   3
3   2
4   2
5   1
如何执行此操作?

仅使用索引和子字符串函数,您需要一个嵌套的case语句来检查最多12个属性,如下所示。您需要进一步嵌套case语句,使其最多可以计数12个属性,目前它最多只能计数2个属性。[注:mytext=属性]

SELECT id, mytext
,case 
when index(mytext, ',')= 0 then 0
when index(mytext, ',')>0 then  
                                    case
                                    when index(substring(mytext,  index(mytext, ','), length(mytext)), ',')=0 then 1
                                    when index(substring(mytext,  index(mytext, ','), length(mytext)), ',')>0 then 2
                                    end
end
from mydb.sd_test
order by id;

当然,您的站点应该至少安装oTranslate和oreplaceudf。那就简单了

CHAR_LENGTH(col) - CHAR_LENGTH(OTRANSLATE(col, ',',''))
如果没有这些功能,这将是一种痛苦。只需尝试实现一个替换,而无需替换复杂的SQL,其性能非常糟糕

在你的情况下,这会容易一点。如果最大数量为12,则最有效的方式为直线:

CASE
   WHEN col LIKE '%,%,%,%,%,%,%,%,%,%,%,%,%' THEN 12
   WHEN col LIKE '%,%,%,%,%,%,%,%,%,%,%,%'   THEN 11
   WHEN col LIKE '%,%,%,%,%,%,%,%,%,%,%'     THEN 10
   WHEN col LIKE '%,%,%,%,%,%,%,%,%,%'       THEN  9
   WHEN col LIKE '%,%,%,%,%,%,%,%,%'         THEN  8
   WHEN col LIKE '%,%,%,%,%,%,%,%'           THEN  7
   WHEN col LIKE '%,%,%,%,%,%,%'             THEN  6
   WHEN col LIKE '%,%,%,%,%,%'               THEN  5
   WHEN col LIKE '%,%,%,%,%'                 THEN  4
   WHEN col LIKE '%,%,%,%'                   THEN  3
   WHEN col LIKE '%,%,%'                     THEN  2
   WHEN col LIKE '%,%'                       THEN  1
   ELSE                                            0
END

不需要嵌套的大小写/位置/子字符串。

可以使用更简单有效的一行代码,如下所示:

SELECT colname
,CHARACTERS(TRIM(colname)) -CHARACTERS(TRIM(OREPLACE(colname,',',''))) +1
 SAMPLE 100  FROM tablename
select length(trim(regexp_replace(Column_Name,'[^,]+','')));

您使用的是哪个teradata版本?14.0或13.0或olderit为13。我没有otranslate,replace等您的数据是否有一个确定的逗号数量上限?属性之间有逗号。每个id的最大属性数为12个您是否能够在您的环境中创建UDF?在TD 13中,没有任何简单的方法可以使用默认函数实现这一点。您可以尝试使用递归CTE,如果您在一个大表上运行它,那么这将非常昂贵。
select length(trim(regexp_replace(Column_Name,'[^,]+','')));