我正在尝试检索只包含特定文本字符串的行。问题是有时文本字符串可能会与其他文本字符串混合在一起,出现这种情况时,我不想检索此行。以下是我正在处理的数据:
MED_TABLE
______________________________________
med_code | med_name
______________________________________
1 calcium potassium iodine fluoride
2 potassium calcium
3 hydrochloride; calcium
4 iodine, calcium, fluoride
5 iodine calcium phosphate
6 calcium phosphate
7 IODINE
8 calcium PHOSPHATE iodine
如果我想单独或成对返回只包含字符串'cadium phosphate'和/或'iodium'的行,有什么有效的方法?在本例中,我只想返回第5、6、7、8行。
我试着用这样一个查询:
SELECT med_code, med_name
FROM med_table
WHERE lower(med_name) LIKE '%calcium phosphate%'
OR WHERE lower(med_name) LIKE '%iodine%'
但这将返回包含我不需要的文本字符串的行。
3条答案
按热度按时间jdg4fx2g1#
使用
rlike
:退货:
这在 hive 里有效
6za6bjd02#
你可以将文本与like进行比较,然后只比较列的长度,这将给出你所期望的上述结果
列的长度应该是like子句的字符串的长度检查语法就像刚才写的这个运行时还为字符串的组合添加了条件,比如'cadium phosphate iodium'和'lidium….'
nhn9ugyo3#
必须用空字符串替换术语和逗号,然后修剪结果并检查长度是否为0:
请参阅演示(对于mysql,区别在于
replace
而不是Hiveregexp_replace
).结果: