1

这是我的表格行:

++ 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,但我不知道怎么写)

4

3 回答 3

2

你的号码可能有多长?试试这个:

SELECT t1.id,t1.txt FROM t t1, t t2 WHERE t1.txt LIKE "%'__'%" AND t2.txt NOT LIKE "%\__',%"
于 2012-10-22T13:32:45.977 回答
1

你不能用 来做LIKE,但你可以用 a来做RLIKE,它使用正则表达式:

select * from mytable
where `text` rlike "'\d+_\d+'"
于 2012-10-21T00:25:58.623 回答
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

即,它返回至少存在一个数字且不带下划线的行。

于 2012-10-22T13:11:45.487 回答