第6课 用通配符进行过滤

第6课 用通配符进行过滤

1.LIKE操作符
假设我们有一张记录考勤记录的表,里面有一列为人名,现在我们想要筛选出姓杨的人的出勤情况,则使用前面学的知识就很难解决这一问题了。这时我们就需要使用通配符来进行数据过滤了。

要想在搜索子句中使用通配符,则必须使用LIKE操作符。
(1)百分号(%)通配符
%表示任意字符出现任意次数(包括0次)
比如说:要找出所有以Fish起头的产品,则:

SELECT prod_id,prod_name
FROM Products
WHERE prod_name LIKE 'Fish%';

在这里插入图片描述
通配符可以在搜索模式中的任意位置使用,并且可以使用多个通配符
如下:

SELECT prod_id,prod_name
FROM Products
WHERE prod_name LIKE '%bean bag%';

上面的代码可以查找出任何包含“bean bag”字符串的值,无论他出现在什么位置,或前后有什么字符。
在这里插入图片描述
通配符也可以出现在搜索模式的中间
搜索以F开头,以y结尾的产品;

SELECT prod_name
FROM Products
WHERE prod_name LIKE 'F%y';

在这里插入图片描述

(2)下划线(_)通配符
_只可以匹配单个字符

SELECT prod_id,prod_name
FROM Products
WHERE prod_name LIKE '_ inch teddy bear';

在这里插入图片描述
2.课后练习
(1)编写SQL语句,从Products表中检索产品名称(prod_name)和描述(prod_desc),仅返回描述中包含toy一词的产品。

SELECT prod_name,prod_desc
FROM Products
WHERE prod_desc LIKE '%toy%';

(2)编写SQL语句,从Products表中检索产品名称(prod_name)和描述(prod_desc),仅返回描述中未出现toy一词的产品。且按产品名称对结果进行排序。

SELECT prod_name,prod_desc
FROM Products
WHERE prod_desc NOT LIKE '%toy%'
ORDER BY prod_name;

(3)编写SQL语句,从Products表中检索产品名称(prod_name)和描述(prod_desc),仅返回描述中同时出现toy和carrots的产品。

SELECT prod_name,prod_desc
FROM Products
WHERE prod_desc LIKE '%toy%' AND prod_desc LIKE '%carrots%';

(4)编写SQL语句,从Products表中检索产品名称(prod_name)和描述(prod_desc),仅返回描述中以先后顺序同时出现toy和carrots的产品。

SELECT prod_name,prod_desc
FROM Products
WHERE prod_desc LIKE '%toy%carrots%';
<think>首先,用户的问题是:“通配符加遍历如何使用”,这似乎是针对之前的讨论,可能是关于KETTLE或其他系统中的通配符使用。在之前的对话中,我解释了KETTLE中FTP下载的通配符使用。现在用户提到“通配符加遍历”,我理解为他们可能想了解如何在遍历文件时使用通配符。 在KETTLE的上下文中,这可能涉及到使用通配符来批量处理文件,比如在FTP步骤中下载多个文件,或者在其他步骤中遍历文件集合。 回顾之前的回答:我详细解释了KETTLE的FTP下载中使用通配符的步骤。用户的问题“通配符加遍历如何使用”可能是指如何结合通配符来遍历文件列。 所以,我需要: 1. 使用中文回答问题。 2. 回答必须完整,并在末尾提出3-5个相关问题。 3. 相关问题的第一行必须是“§§相关问题§§”,不能换行分散。 4. 遵循示例格式:先回答问题,然后代码块(如果需要),最后相关问题。 用户的问题:“通配符加遍历如何使用”。我认为这在KETTLE中可能指的是在文件输入步骤中使用通配符来遍历匹配的文件。 在KETTLE中,“遍历”可能意味着使用“获取文件名”步骤或类似的功能来生成文件列,然后处理每个文件。结合通配符,就是在生成列时使用通配符过滤文件。 例如: - 在“获取文件名”步骤中,可以指定通配符来获取匹配的文件名列。 - 然后使用“循环”或“转换”来处理每个文件。 所以,我的回答应该解释如何结合使用通配符和遍历机制。 步骤: 1. 添加“获取文件名”步骤(或“File Input”)。 2. 在配置中设置通配符。 3. 连接到后续步骤遍历处理每个文件。 确保回答简洁明了。 现在,结构: - 先简要解释概念。 - 提供步骤。 - 如果有代码或伪代码,使用代码块(但KETTLE没有代码,它有图形界面,所以可能描述步骤)。 - 最后,添加相关问题。 相关问题必须基于用户的问题和我的回答,提出3-5个。 用户的问题是“通配符加遍历如何使用”,所以我需要回答这个。 可能的回答: 在KETTLE中结合通配符和遍历的典型方法是使用“Get File Names”步骤: 1. 添加“Get File Names”步骤。 2. 在“File/Folder”选项卡中,设置目录,并输入通配符(如 *.txt)。 3. 勾选“Wildcard”选项(如果有)。 4. 输出会将匹配的文件名列为字段。 5. 然后连接到“Copy Rows to Result”或直接使用“For Each”步骤遍历每个文件名。 6. 在后续步骤中(如另一个转换),使用变量引用文件名进行处理。 这应该覆盖“通配符加遍历”。 最后,相关问题: 1. 如何在KETTLE中使用通配符遍历子目录? 2. 通配符在KETTLE中支持哪些特殊字符? 3. 遍历文件时如何处理文件名中的空格? 4. 如何在遍历中使用多个通配符模式? 5. KETTLE中遍历文件的最佳实践是什么?我需要确保3-5个。 输出格式: - 回答完后,直接写“§§相关问题§§”然后列相关问题。 完整响应: 在 **KETTLE (Pentaho Data Integration)** 中结合通配符和遍历文件,常用于批量处理匹配的文件。以下是基本步骤: 1. **添加 “获取文件名” 步骤** 在工作流的 Input 类别中选择 “Get File Names” 步骤。 2. **配置通配符** - 在 “File/Folder” 选项卡中: - **文件名或目录名**:输入目录路径。 - **通配符(Wildcard)**:输入模式(如 `*.csv` 匹配所有 CSV 文件)。 - 确保 “Include subfolders” 是否勾选以遍历子目录。 3. **遍历文件名** - 从 “Get File Names” 输出连接到 “Copy Rows to Result” 步骤。 - 使用 “Job” -> “Transformation” 结合 “For Each” 步骤遍历每个文件名: - 在作业中添加 “Transformation” 步骤引用该转换。 - 使用 “Set Variables” 或直接在子转换中通过 ${FILE_PATH} 引用变量。 4. **示例流程** ``` 获取文件名(通配符:data_*.txt) -> 行复制到结果 -> 作业(遍历:For Each Row) -> 子转换(使用文件名处理每个文件) ``` §§相关问题§§ 1. KETTLE 中如何递归遍历子目录下的文件? 2. 通配符模式在文件遍历中区分大小写吗? 3. 如何处理遍历时文件名包含特殊字符的情况? 4. 在 KETTLE 中,如何避免重复遍历相同的文件? 5. 结合通配符和遍历时,性能优化有哪些技巧? 这应该符合要求。 </think>在 **KETTLE (Pentaho Data Integration)** 中结合通配符和遍历功能,主要用于批量处理和迭代匹配的文件集合(如下载、读取或处理文件)。以下是核心步骤和用法: ### 关键步骤 1. **配置通配符文件集合** - 使用 **“获取文件名” (Get File Names)** 步骤(位于 Input 类别)。 - 在 **“文件/目录” (File/Folder)** 选项卡中: - **文件名或目录名**:输入目标目录路径(如 `/ftp/data`)。 - **通配符 (Wildcard)**:指定匹配模式(如 `report_*.csv` 匹配所有以 `report_` 开头的 CSV 文件)。 - **包含子文件夹 (Include subfolders)**:勾选以递归遍历子目录。 2. **生成文件名列** - 该步骤输出一个字段(默认 `filename`),包含所有匹配的文件名列。 - 示例输出:如果通配符为 `*.txt`,则输出类似 `["file1.txt", "file2.txt"]`。 3. **遍历处理每个文件** - 连接 **“行复制到结果” (Copy Rows to Result)** 步骤,将列传递到作业层。 - 在 **作业 (Job)** 中添加 **“遍历每一行” (For Each Row)** 步骤: - **从结果中获取行?**:勾选以迭代文件名列。 - 在 **“字段选择” (Select Values)** 中映射字段(如 `filename` 到变量 `${FILE_NAME}`)。 - 子转换或步骤中使用变量引用文件名(如 FTP 下载或文本输入步骤通过 `${FILE_NAME}` 处理单个文件)。 ### 示例流程 ```plaintext [获取文件名] → [行复制到结果] → [作业: 遍历每一行] → [子转换处理单个文件] ``` - **通配符遍历场景**:批量下载 FTP 上所有匹配 `*.zip` 的文件,并逐个解压。 - **注意事项**: - 确保通配符语法正确(`*` 任意字符,`?` 单个字符)。 - 测试时先用简单通配符(如 `test.*`)验证。 - 避免大文件集遍历导致的性能问题,可通过分页或限制文件数优化。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值