SSIS派生列多条件匹配:基于多关键词识别服务器系统的方法
SSIS派生列多关键词判断解决方案
方案1:用OR连接多个FINDSTRING判断
FINDSTRING只能单次检查一个关键词,直接用||(逻辑或)把多个判断条件连起来就行——只要任意一个关键词匹配,就标记为"Server",否则返回"Desktop"。
示例代码:
FINDSTRING(OS,"Server",1) > 0 || FINDSTRING(OS,"Red Hat",1) > 0 || FINDSTRING(OS,"AIX",1) > 0 ? "Server" : "Desktop"
- 逻辑直白:只要OS列包含你列出的任意一个服务器关键词,就触发"Server"分支;所有关键词都不匹配才会走"Desktop",完全不会出现你担心的覆盖问题
- 扩展方式:把剩下的7个关键词用
||追加到条件里即可,比如|| FINDSTRING(OS,"Ubuntu Server",1) > 0
方案2:正则表达式(SSIS 2017+适用)
如果你的SSIS版本是2017或更高,用REGEXP_MATCH函数能让代码更简洁,一次性匹配多个关键词:
示例代码:
REGEXP_MATCH(OS,"Server|Red Hat|AIX",1) ? "Server" : "Desktop"
- 正则里的
|代表“或”,把所有服务器关键词用|分隔放在引号里就行,比如"Server|Red Hat|AIX|CentOS|SUSE" - 忽略大小写设置:把第三个参数改成
3即可,比如REGEXP_MATCH(OS,"Server|Red Hat|AIX",3) ? "Server" : "Desktop"
额外提示
如果担心大小写问题(比如OS列里有"server"小写),可以先把OS列转成统一大小写再判断,比如用UPPER(OS):
FINDSTRING(UPPER(OS),"SERVER",1) > 0 || FINDSTRING(UPPER(OS),"RED HAT",1) > 0 ? "Server" : "Desktop"
10个条件的判断完全不会有性能问题,SSIS处理这种简单逻辑毫无压力,放心用就行。
内容的提问来源于stack exchange,提问作者Out_On_The_Weekend
相关产品推荐
相关产品推荐

