SQL_CASE_1

本文介绍了一种复杂的SQL查询方法,该方法能够从特定的表结构中提取有用的数据。通过使用子查询和CASE WHEN语句,可以有效地解析包含特殊字符的序列号,并从中抽取对应的时间戳数据。
表结构:
ColNo Time SerialNo
1(p-key) 020111 030201 030301 AxCSAaa SceCC GYAZZ
需要:
根据SerialNo中不同的值(用空格分开)来获取Time中对应位置的值
Time格式是6个一组




select distinct
substr(a.Time,SpaceCount*7+1,6) as "时间",
a.SerialNo as "序列号"
from
(select (case when SpaceCount is null then 0 else SpaceCount end) as SpaceCount,calsign from (
select ColNo,
(length(replace(SerialNo,substr(SerialNo,instr(SerialNo,'GYA',1,1)),''))-
length(replace(replace(SerialNo,substr(SerialNo,instr(SerialNo,'GYA',1,1)),''),' ','')))/length(' ') as SpaceCount
from TableName
where SerialNo like '%GYA%')) b,
TableName a
where a.ColNo= b.ColNo and a.SerialNo like '%GYA%';

简化书写{ def dependent_control(self, execution_timing: ExecutionTiming, # 执行时机 current_case: dict[str, Any], # 当前用例 current_response: Response | None = None # 当前用例的响应数据 ): """处理测试用例的依赖关系""" # 执行时机判断 execution_timing = execution_timing.lower() section_data = current_case.get(execution_timing, []) if not section_data: # 用例无配置依赖数据setup或teardown时,跳过执行 pass dependence_case = None # 依赖用例 sql_result = None # 数据库查询结果 dependence_sql_result = None # 依赖项依赖的sql结果 # 数据库查询 if execution_timing == ExecutionTiming.SETUP: sql_list = current_case.get("setup_sql", []) if sql_list: logger.info(f" - <SQL数据准备> 执行数据库查询") sql_result = execute_sql_list(sql_list, [ReplaceMode.CACHE]) for section_data_item in section_data: if "case_id" in section_data_item: case_id = section_data_item["case_id"] title = f"依赖用例:{case_id}" self._log_section_header(execution_timing.upper(), title) logger.info(f"1. 获取依赖用例及其请求数据,替换动态参数") dependence_case = self._get_dependence_case(case_id) else: sql_alias = section_data_item["sql_alias"] title = f"获取的数据库数据名称:{sql_alias}" self._log_section_header(execution_timing.upper(), title) logger.info(f"1. 获取依赖的sql查询数据") dependence_sql_result = sql_result.get(sql_alias) # 处理每个依赖数据项 logger.info(f"2. 处理依赖数据项,开始执行依赖操作项,逐个处理依赖数据的提取和设置") match execution_timing: # section_data_item:字段dependence_case_data的数据列表 case ExecutionTiming.SETUP: # 前置功能:从依赖用例的请求(request)中提取数据供当前用例使用 # 前置功能:从依赖用例的响应(response)中提取数据供当前用例使用 # 前置功能:查询数据库(sqldata)供后续步骤使用 dependent_data = section_data_item.get("dependent_data", []) self._process_dependency_items(ExecutionTiming.SETUP, dependent_data, # 依赖数据项(包含操作等信息) dependence_case, # 依赖用例的 current_case, # 当前用例 dependence_sql_result) # 数据库查询结果 # section_data_item:字段teardown的数据列表 case ExecutionTiming.TEARDOWN: # 后置功能:从依赖用例的响应(self_response)中提取数据存入缓存供后续步骤使用 param_prepare = section_data_item.get("param_prepare", []) self._process_dependency_items(ExecutionTiming.TEARDOWN, param_prepare, # 依赖数据项(包含操作等信息) dependence_case) # 依赖用例 # 后置功能:从当前用例请求(request)中提取数据供依赖用例使用 # 后置功能:从当前用例的响应(response)提取数据供依赖用例使用 send_request = section_data_item.get("send_request", []) self._process_dependency_items(ExecutionTiming.TEARDOWN, send_request, # 依赖数据项(包含操作等信息) dependence_case, # 依赖用例 current_case, # 当前用例 current_response, # 当前用例的响应数据 is_send_request=True)# 发送请求 # 数据库查询 if execution_timing == ExecutionTiming.TEARDOWN: sql_list = current_case.get("teardown_sql", []) if sql_list: logger.info(f" - 数据清理") execute_sql_list(sql_list, [ReplaceMode.CACHE])}
最新发布
11-10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值