sql:按部分匹配分组
我可以用它买到所有的PBsql:按部分匹配分组,sql,oracle,Sql,Oracle,我可以用它买到所有的PB +----+------+---------------------------------------+ | id | dur | workdur | +----+------+---------------------------------------+ | 1 | 64 | /home/public/users/james/PB_3594162_0 | | 2 | 123 | /
+----+------+---------------------------------------+
| id | dur | workdur |
+----+------+---------------------------------------+
| 1 | 64 | /home/public/users/james/PB_3594162_0 |
| 2 | 123 | /home/public/users/john/PB_990-94162_0 |
| 3 | 13 | /doc/users/jason/PB_0125135 |
| 4 | 355 | /doc/users/jason/notPB |
如何按%PB\uquot
的部分字符串进行分组,以便获得上述选择的平均dur
注意:在select语句中,不会选择id=4
select workdur from work where workdur like '%PB_%'
一件重要的事情您应该注意的是,在oracle(一般来说,sql)中,
是一个通配符,类似于%
,所以请小心使用类似的
,因为它等于类似于“%PB%”
因此,对于您的案例,您应该更改为(并根据@Aleksej的建议删除嵌套)
你可以用这个
select workdur from work where workdur like '%PB_%'
一件重要的事情您应该注意的是,在oracle(一般来说,sql)中,
是一个通配符,类似于%
,所以请小心使用类似的
,因为它等于类似于“%PB%”
因此,对于您的案例,您应该更改为(并根据@Aleksej的建议删除嵌套)
您只需将聚合与
WHERE
条件一起使用,无需嵌套查询:
select avg(dur)
from work
where workdur like '%PB\_%' escape '\';
您只需将聚合与
WHERE
条件一起使用,无需嵌套查询:
select avg(dur)
from work
where workdur like '%PB\_%' escape '\';
这应该做到:
select avg(dur)
from work
where workdur like '%PB_%'
我将workdur
转换为FLOAT,因为这样即使在逗号之后,它也会给出值(除非您将其存储为FLOAT)
除此之外,\uu
是中的一个特殊符号,与
类似,如果要将其视为下划线,则需要对其进行转义。应该这样做:
select avg(dur)
from work
where workdur like '%PB_%'
我将workdur
转换为FLOAT,因为这样即使在逗号之后,它也会给出值(除非您将其存储为FLOAT)
除此之外,
\uu
是中的一个特殊符号,与
类似,如果要将其视为下划线,则需要对其进行转义。如果要搜索多个模式,分组确实很有用,您可以使用case:
CREATE TABLE #test
(
id INT
, dur INT
, workdur VARCHAR(100)
);
INSERT INTO #test (id, dur, workdur)
VALUES (1, 64, '/home/public/users/james/PB_3594162_0')
, (2, 123, '/home/public/users/john/PB_990-94162_0')
, (3, 13, '/doc/users/jason/PB_0125135')
, (4, 355, '/doc/users/jason/notPB');
SELECT AVG(CAST(dur AS FLOAT))
FROM #test
WHERE workdur LIKE '%PB\_%' ESCAPE '\';
如果您有多个模式要搜索,分组确实很有用,您可以使用以下用例:
CREATE TABLE #test
(
id INT
, dur INT
, workdur VARCHAR(100)
);
INSERT INTO #test (id, dur, workdur)
VALUES (1, 64, '/home/public/users/james/PB_3594162_0')
, (2, 123, '/home/public/users/john/PB_990-94162_0')
, (3, 13, '/doc/users/jason/PB_0125135')
, (4, 355, '/doc/users/jason/notPB');
SELECT AVG(CAST(dur AS FLOAT))
FROM #test
WHERE workdur LIKE '%PB\_%' ESCAPE '\';
它是什么类型的数据库?oracle和为什么-1?编辑您的问题并显示您想要得到的结果。还可以用您正在使用的数据库标记问题。我的意思是,不
选择平均值(dur)代码>做你想做的事?@GordonLinoff否,因为这将包括第四个数据库,它不是以PB_u@ealeon开头的,因为除了oracle之外还有其他类型的数据库。它是什么类型的数据库?oracle和为什么-1?编辑你的问题并显示你想要的结果。还可以用您正在使用的数据库标记问题。我的意思是,不选择平均值(dur)代码>做你想做的事?@GordonLinoff不,因为这将包括第四个不以PB_u@ealeon开头的数据库,因为除了oracle之外还有其他类型的数据库。哦,不需要执行组为什么嵌套查询?哦,不需要执行组为什么嵌套查询?