Summary
Excel 中的查找函数 vlookup(lookup_value,table_array,col_index_num,[range_lookup])
的第四个参数,range_lookup
可省略。
若省略,则使用默认值true
,效果为:模糊匹配
如果你的查找功能是精确匹配,一定记得别省略,一定要传入第4个参数range_lookup
的值为0
或false
。
官网文档:https://support.microsoft.com/zh-cn/office/vlookup-942f678a-1bfc-4ccf-8dfa-f5057ded5c65
Excel 函数参数:
Scenerio
作为开发人员,产品经理时不时会扔过来一个Excel,里面包含本次迭代的原始数据(会经常有更新)。
而开发人员的工作就是:Excel --> Database
即将Excel中的数据经提取、转换后注入到业务数据库中。
而Excel --> Database
这中间的流程一般不会手动去做(除非数据量真的很少)。
那么可以采取的做法有:
- 使用任一种自己熟悉的编程语言,该语言有开源的、用于读写Excel的类库,以及读写对应数据库的类库(这个应该都有)。如 Java和JavaScript。
- Excel公式,批处理
- 多行文本编辑(VSCode 以及 Sublime text 就支持)
- 手动转换(人力成本、时间成本大,且流程不易固定,出错率高)
方法1的缺点:
- 比较重
:转换100条数据和转换100万条数据,要写的代码逻辑步骤大致相同;
- 不灵活
:针对转换模式不固定/会经常变动
的Excel,要经常去调整对应的逻辑,并仔细地调试、测试、验证。
所以我选了2+3的方式。
先在Excel中使用 vlookup, is, text, concatenate 等一系列函数产生一些有利于我生成SQL文本的"元数据/源字段"。
然后复制这些内容到VSCode中,通过多行编辑调整到SQL的语法。
粘贴SQL到数据库客户端执行。
问题就出在 vlookup
函数的使用上。
当我对数据库中的新数据做多表的关联查询分析时,发现数据库结果集和Excel中的行列数据不完全一致。
哪里出了问题?
排查
肉眼看。
发现使用 vlookup
函数处理的单元格中数据不对。
通过搜索了解到 Excel 中的查找函数 vlookup
有四个参数,第四个参数可省略。但是,不能省略!
VLOOKUP(lookup_value,table_array,col_index_num,[range_lookup])
前几个参数,能搜到这里的朋友应该都懂。
range_lookup 值规则 默认为模糊匹配
range_lookup
控制查找是精确匹配还是模糊匹配。
range_lookup = 0 或 false
是精确匹配
range_lookup = 1 或 true
是模糊匹配
如果不写,默认值为true,即默认为模糊匹配
。
由于我在使用过程中没有注意到这个函数的细节,导致需要加班重新转换数据。
More
Excel中几个功能相似的查找函数:
- lookup 查找
- vlookup (Vertical lookup) 纵向查找
- hlookup (Horizontal lookup) 水平查找
- xlookup (eXtensive lookup) 有扩展功能的查找