我用太极数据。无法访问函数、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
我怎样才能做到这一点?
我用太极数据。无法访问函数、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
我怎样才能做到这一点?
仅使用index
和substring
函数,您将需要一个嵌套的 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 和 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。
SELECT colname
,CHARACTERS(TRIM(colname)) -CHARACTERS(TRIM(OREPLACE(colname,',',''))) +1
SAMPLE 100 FROM tablename
可以使用更简单有效的一行代码,如下所示:
select length(trim(regexp_replace(Column_Name,'[^,]+','')));