1
文字列内の一意のバイトを数えようとしていますか?ハイブを使用して文字列内の一意の整数を数えるには?
DATA(数字のみバイトの例えば電話番号):
1234567890
1111111112
結果:私は以下試してみました、それは合計ので動作しませんでした
10
2
()は、UDF 'の場合は'を受け入れません。
select phone
, sum(
cast(if(length(regexp_replace(phone,'0',''))<10,'1','0') as int) +
cast(if(length(regexp_replace(phone,'1',''))<10,'1','0') as int) +
cast(if(length(regexp_replace(phone,'2',''))<10,'1','0') as int) +
cast(if(length(regexp_replace(phone,'3',''))<10,'1','0') as int) +
cast(if(length(regexp_replace(phone,'4',''))<10,'1','0') as int) +
cast(if(length(regexp_replace(phone,'5',''))<10,'1','0') as int) +
cast(if(length(regexp_replace(phone,'6',''))<10,'1','0') as int) +
cast(if(length(regexp_replace(phone,'7',''))<10,'1','0') as int) +
cast(if(length(regexp_replace(phone,'8',''))<10,'1','0') as int) +
cast(if(length(regexp_replace(phone,'9',''))<10,'1','0') as int)
) as unique_bytes
from table;
私は解決策として正規表現のいずれかに並んでいません。
ゴードン、速い応答のためにありがとう。方程式の和は必要ありません。私は入力を選んだ直後に実現しました。しかし、あなたのソリューションはずっと良い方法になり、より効率的です!ありがとう。 – invoketheshell
私はすぐに合計の問題に気付きました。愚かな私。 'if'部分は文字列を返します。そのため、私は整数としてキャストします。限り、置換するapposedとしてregexp_replaceを使用して、私は多くの正規表現を使用して、習慣にデフォルトを設定していた。ソリューションに感謝します。それは確かに私のものよりも効率的です、私はそれを見ていたらいいと思います。乾杯。 – invoketheshell