sql - Oracle 查询值匹配模式
问题描述
我有一个DOCUMENT
包含列名ID_DOCUMENT
和FILE_NAME
.
我想在表中找到FILE_NAME
遵循这种模式的行:VA_#NP#_#NA#_#NNN#_#TXT#
.
在示例中,我会找到文件:VA_901085_000002_002_.txt
和 VA_901085_000002_003_.txt
,因此名称以“VA”开头并以“_.txt”结尾的文件
ID_DOCUMENT FILE_NAME
1 VA_901085_000002_002_.txt
2 VA_901085_000002_003_.txt
3 VA_901085_000002_003.txt
4 VA_902833_000001_001.pdf
5 BT_049009-200811281247.pdf
... ...
我试过这个查询:
SELECT * FROM DOCUMENT WHERE FILE_NAME LIKE 'VA%' AND FILE_NAME LIKE'%_.txt';
但查询返回所有以“VA”开头并包含 txt 的文件。我哪里出错了?
解决方案
怎么样SUBSTR
?
SQL> WITH test (id, name)
2 AS (SELECT 1, 'VA_901085_000002_002_.txt' FROM DUAL
3 UNION ALL
4 SELECT 2, 'VA_901085_000002_003_.txt' FROM DUAL
5 UNION ALL
6 SELECT 3, 'VA_901085_000002_003.txt' FROM DUAL
7 UNION ALL
8 SELECT 4, 'VA_902833_000001_001.pdf' FROM DUAL
9 UNION ALL
10 SELECT 5, 'BT_049009-200811281247.pdf' FROM DUAL)
11 SELECT *
12 FROM test
13 WHERE SUBSTR (name, 1, 2) = 'VA'
14 AND SUBSTR (name, -5) = '_.txt';
ID NAME
---------- --------------------------
1 VA_901085_000002_002_.txt
2 VA_901085_000002_003_.txt
SQL>
您的代码中的问题是您使用了一个下划线_
,它是一个搜索通配符(就像%
),但它只用于一个字符。这意味着你应该逃避它(见第 14 行):
SQL> WITH test (id, name)
2 AS (SELECT 1, 'VA_901085_000002_002_.txt' FROM DUAL
3 UNION ALL
4 SELECT 2, 'VA_901085_000002_003_.txt' FROM DUAL
5 UNION ALL
6 SELECT 3, 'VA_901085_000002_003.txt' FROM DUAL
7 UNION ALL
8 SELECT 4, 'VA_902833_000001_001.pdf' FROM DUAL
9 UNION ALL
10 SELECT 5, 'BT_049009-200811281247.pdf' FROM DUAL)
11 SELECT *
12 FROM test
13 WHERE NAME LIKE 'VA%'
14 AND (name LIKE '%?_.txt' ESCAPE '?');
ID NAME
---------- --------------------------
1 VA_901085_000002_002_.txt
2 VA_901085_000002_003_.txt
SQL>
推荐阅读
- sql - Power BI 报表生成器指标公式
- r - 如何在 floor_date 函数后每 8 行检查一次时间是否相似(并在需要时进行更正)
- python - 在 VSCode 终端中添加 Conda 环境
- java - java中的Avro到json转换器
- postgresql - 有没有办法将函数调用添加到 knex 返回或选择方法?
- python - 在不使用 Pandas 的情况下读取 Excel 文件并添加新列并打印和输出文件
- r - 是否可以通过 R 从 PowerBi 可视化中提取信息
- laravel - ReletableQuery $request->isUpdateOrUpdateAttachedRequest() 返回 null
- mysql - SQL 查询以显示过去一天的多个计数
- python - 无法将数据透视 df 写入 Excel