一个字段被定义为array(varchar)
。
'ABCD'
说,我要搜索字段包含特定文本模式的记录。
如果我运行此SQL:
select * from data_table
where top_results like '%ABCD%'
它抛出此错误:
查询失败(#20190730_021145_23663_dn9fj):第2:7行: LIKE表达式必须计算为varchar(实际值:array(varchar)
检测某个字符串是否存在的正确语法是什么?
答案 0 :(得分:2)
Use filter(array(T), function(T, boolean)) -> array(T)
此函数返回包含元素的数组,该元素对其返回true。使用基数函数检查数组是否为空:
SELECT cardinality(filter(ARRAY ['123ABCD456', 'DQF', 'ABCD', 'ABC'], x -> x like '%ABCD%'))>0 ;
返回
true
检查另一个值:
SELECT cardinality(filter(ARRAY ['123ABCD456', 'DQF', 'ABCD', 'ABC'], x -> x like '%XXX%'))>0 ;
返回
false
希望您有主意。
答案 1 :(得分:1)
将其转换为json字符串,然后搜索该字符串
### plot one matrix vs. another matrix
reset session
FILE1 = "TestMatrix1.dat"
FILE2 = "TestMatrix2.dat"
stats FILE1 nooutput
ColMax = STATS_columns # get maximum number of columns
set table $Dummy
Mat1 = Mat2 = ''
plot for [i=1:ColMax] FILE1 u (Mat1=Mat1.sprintf(" %g",column(i)),0) w table
plot for [i=1:ColMax] FILE2 u (Mat2=Mat2.sprintf(" %g",column(i)),0) w table
unset table
set print $Data
do for [i=1:words(Mat1)] {
print sprintf("%s %s",word(Mat1,i),word(Mat2,i))
}
set print
plot $Data u 1:2 w p pt 7
### end of file
json_format(cast(top_results as JSON))