我使用teradata。没有的功能的访问,UDF的,存储过程如何计算字符串中逗号的数量?
表
id attribute
1 strength, power
2 ring, wig, puff
3 strength, ring
4 puff, wig
5 power
我需要计算属性
id att_number
1 2
2 3
3 2
4 2
5 1
我如何能做到这一点的数量?
我使用teradata。没有的功能的访问,UDF的,存储过程如何计算字符串中逗号的数量?
表
id attribute
1 strength, power
2 ring, wig, puff
3 strength, ring
4 puff, wig
5 power
我需要计算属性
id att_number
1 2
2 3
3 2
4 2
5 1
我如何能做到这一点的数量?
当然,您的网站应该至少安装oTranslate和oReplace UDF。然后,它是一个简单的
CHAR_LENGTH(col) - CHAR_LENGTH(OTRANSLATE(col, ',',''))
没有这些功能,它在<insert your favourite body part here>
痛。只需尝试在没有oREPLACE的情况下实施REPLACE,复杂的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
无需嵌套CASE/POSITION/SUBSTRING。
仅使用index
和substring
函数,您需要一个嵌套case语句来检查最多12个属性,如下所示。您需要进一步嵌套case语句以计算最多12个属性,目前它只能计数到最多2个属性。 [note:mytext = attributes]
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;
SELECT colname的 ,字符(TRIM(colname的))-CHARACTERS(TRIM(OREPLACE(colname的, '', '')))的Teradata的版本是您使用+1 样品100 FROM表名
? 14.0或13.0或更高版本 – 2013-10-31 15:10:38
它是13.我没有翻译,替换等 –
您的数据是否具有确定性的上限。逗号礼物? – 2013-10-31 15:44:28