这是我的表格行:
++ id ---- text ++++++++++++++
-- 1 ---- '90','80,'50' -----
-- 2 ---- '30','2','1_2' --
-- 3 ---- '10_2','5_3' -----
如您所见,text
包含两种类型的数字,一种没有下划线,另一种包含下划线。
我想选择至少有一个没有下划线的数字的行(类型1)。像这样:(结果集)
++ id ---- text ++++++++++++++
-- 1 ---- '90','80,'50' -----
-- 2 ---- '30','2','1_2' --
(忽略3
)
怎么做? (我认为这可能是NOT LIKE
,但我不知道怎么写)
答案 0 :(得分:2)
你的电话号码可以多长时间?试试这个:
SELECT t1.id,t1.txt FROM t t1, t t2 WHERE t1.txt LIKE "%'__'%" AND t2.txt NOT LIKE "%\__',%"
答案 1 :(得分:1)
您不能使用LIKE
,但可以使用RLIKE
,它使用正则表达式:
select * from mytable
where `text` rlike "'\d+_\d+'"
答案 2 :(得分:1)
以下查询计算字符串中逗号的数量,不同数字的数量可以计算为逗号数量的1,因为数字用逗号分隔,字符串中的下划线数量:
select id,
len(text) - len(replace(text,',','')) as count_of_commas,
len(text) - len(replace(text,',','')) + 1 as count_of_number,
len(text) - len(replace(text,'_','')) as count_of_underscore,
len(text) - len(replace(text,',','')) + 1 - (len(text) - len(replace(text,'_',''))) as zero_if_no_number_without_underscore_exists
from t1
上述查询给出了以下结果:
现在使用上述查询的逻辑,可以使用以下查询来获得所需的结果:
select * from t1
where len(text) - len(replace(text,',','')) + 1 - (len(text) - len(replace(text,'_',''))) != 0
即。它返回存在至少一个数字而没有下划线的行。