sql - 查询表达式vba访问中的表达式太复杂
问题描述
来自stackoverflow的朋友你好
我遇到了访问和 sql 的问题,请在我的查询下方找到
update finaldata set [Area]=
IIF(InStr(1,[Name],'PoolSide',1)<>0,'PoolSide',
IIF(InStr(1,[Name],'Mountainside',1)<>0,'Mountainside',
IIF(InStr(1,[Name],'Garden Area',1)<>0,'Garden Area',
IIF(InStr(1,[Name],'Ground Floor',1)<>0,'Ground Floor',
IIF(InStr(1,[Name],'Annex Building',1)<>0,'Annex Building',
IIF(InStr(1,[Name],'Beachside',1)<>0,'Beachside',
IIF(InStr(1,[Name],'Beachfront',1)<>0,'Beachfront',
IIF(InStr(1,[Name],'Mountainside',1)<>0,'Mountainside',
IIF(InStr(1,[Name],'Executive',1)<>0,'Executive Level',
IIF(InStr(1,[Name],'Lakeside',1)<>0,'Lakeside',
IIF(InStr(1,[Name],'Mezzanine',1)<>0,'Mezzanine',
IIF(InStr(1,[Name],'Oceanfront',1)<>0,'Oceanfront',
IIF(InStr(1,[Name],'Overwater',1)<>0,'Overwater,
IIF(InStr(1,[Name],'Slope side',1)<>0,'Slope side',
IIF(InStr(1,[Name],'Tower',1)<>0,'Tower,'Delete'
)))))))))))))))
我有 10 万条记录,我不想使用记录集,它需要太长时间,我已经尝试过了。我有很多内部连接,而且我的数据库文件越来越大。
我有哪些处理字符串的选项?我有一个长长的字符串存储在 [Name] 中,具有房间的许多特征。我试图破译这个名字。
如果我唯一的选择是记录集,那么处理嵌套的 if 或 select 案例会更快吗?
感谢您的时间和帮助
解决方案
如评论中所述,您当前的代码缺少几个单引号来终止您正在测试的字符串,并且最好使用单个switch
语句而不是多个嵌套iif
语句编写,例如:
update finaldata set [area] =
switch
(
instr([name],'PoolSide')<>0,'PoolSide',
instr([name],'Mountainside')<>0,'Mountainside',
instr([name],'Garden Area')<>0,'Garden Area',
instr([name],'Ground Floor')<>0,'Ground Floor',
instr([name],'Annex Building')<>0,'Annex Building',
instr([name],'Beachside')<>0,'Beachside',
instr([name],'Beachfront')<>0,'Beachfront',
instr([name],'Mountainside')<>0,'Mountainside',
instr([name],'Executive')<>0,'Executive Level',
instr([name],'Lakeside')<>0,'Lakeside',
instr([name],'Mezzanine')<>0,'Mezzanine',
instr([name],'Oceanfront')<>0,'Oceanfront',
instr([name],'Overwater')<>0,'Overwater',
instr([name],'Slope side')<>0,'Slope side',
instr([name],'Tower')<>0,'Tower',
true,'Delete'
)
在性能方面instr
,您可能会发现使用运算符更快,而不是重复使用该函数,该函数返回有关字符串中子字符串的不必要位置数据like
,例如:
update finaldata set [area] =
switch
(
[name] like '*PoolSide*','PoolSide',
[name] like '*Mountainside*','Mountainside',
[name] like '*Garden Area*','Garden Area',
[name] like '*Ground Floor*','Ground Floor',
[name] like '*Annex Building*','Annex Building',
[name] like '*Beachside*','Beachside',
[name] like '*Beachfront*','Beachfront',
[name] like '*Mountainside*','Mountainside',
[name] like '*Executive*','Executive Level',
[name] like '*Lakeside*','Lakeside',
[name] like '*Mezzanine*','Mezzanine',
[name] like '*Oceanfront*','Oceanfront',
[name] like '*Overwater*','Overwater',
[name] like '*Slope side*','Slope side',
[name] like '*Tower*','Tower',
true,'Delete'
)
鉴于这是对整个数据集进行操作,并且在执行时每条记录最多可以执行 15 次比较,因此评估 16 个单独的查询可能会更快,每个查询具有以下结构:
update finaldata set [area] = 'PoolSide' where [name] like '*PoolSide*'
推荐阅读
- sql - 修复 Rails 模型范围上的 sql 注入
- c - 当路径名太长时,glibc 的 syscall open 实现在哪里设置 ENAMETOOLONG errno?
- laravel - 如何急切加载(一对多)平均和排序
- azure - 事件中心的 Azure 数据资源管理器检查点
- angularjs-directive - 如何防止 AngularJS 路由使用 ~ (波浪号)对 url 参数进行编码
- json - JSON 数组到 JSON 对象
- javascript - JavaScript 减去零更改结果
- python - 使用 python3 list(set(arr)) 意外的间歇性执行
- java - 如何使用 CSVWriter 将字符串转换为 CSV 文件
- sql - PostgreSQL 检查 Golang 中的空数组更改行为