VBA之正则表达式(45)-- 提取SQL语句中的函数

news/2025/1/3 9:55:08/

实例需求:数据工程师或者DBA日常工作中大量使用SQL语句,有些语句(或者存储过程)行数非常多,现在需要提取其中的所有使用了函数的相关部分,对于如下语句,需要提取Mid([编号],2,4) AS [产品]datediff("D",[购买日期],"2024-01-01") AS [日期]两个字符串。

sql">SELECT "河北省" AS [省份], Mid([编号],2,4) AS [产品], [类别] AS [品类], [数量], datediff("D",[购买日期],"2024-01-01") AS [日期] FROM Table

示例代码如下。

Sub Demo()Dim objRegExp As Object, objMHs As Object, objMH As ObjectDim sText As StringsText = ActiveSheet.Range("A1")Set objRegExp = CreateObject("vbscript.regexp")objRegExp.IgnoreCase = TrueobjRegExp.Global = TrueobjRegExp.MultiLine = FalseobjRegExp.Pattern = "SELECT|FROM.*"sText = objRegExp.Replace(sText, "")objRegExp.Pattern = "\s+(\w+\(.+?\)[^,]+)"Set objMHs = objRegExp.Execute(sText)For Each objMH In objMHsDebug.Print objMHNextSet objRegExp = Nothing
End Sub

【代码解析】
第4行代码从A1单元格读取SQL语句。
第5行代码创建正则对象。
第6行代码设置正则匹配忽略字符大小写。
第7行代码设置全局匹配。
第7行代码设置单行匹配。
第9行代码设置正则匹配模式。
第10行代码执行正则替换,只保留SELECT之后,FROM之前的字符串,这样可以使用简洁的匹配模式提取相关内容。
第11行代码设置正则匹配模式。

正则表达式说明
\s+匹配一个或者多个白字符
\w+匹配一个或者多个英文字母或者数字
\(.+?\)匹配圆括号包裹的任意多个字符
[^,]+匹配不包含逗号的一个或者多个字符

运行代码,【立即窗口】中输出结果如下。

 Mid([编号],2,4) AS [产品]datediff("D",[购买日期],"2024-01-01") AS [日期] 

匹配结果如下图所示。

在这里插入图片描述


http://www.ppmy.cn/news/1434605.html

相关文章

【上海大学计算机组成原理实验报告】四、指令系统实验

一、实验目的 了解指令结构、PC寄存器的功能和指令系统的基本工作原理。 学习设计指令的方法。 二、实验原理 根据实验指导书的相关内容,对于部分使用频率很高,且只用几条微指令即可完成的简单操作,可以把这部分简单操作的微指令序列固定下…

扩散卷积模型 笔记

1 Title Diffusion Convolutional Neural Networks(James Atwood and Don Towsley)【NeurIPS 2016】 2 Conclusion This paper presents diffusion-convolutional neural networks (DCNNs), a new model for graph-structured data. Through the introd…

13个Java基础面试题

Hi,大家好,我是王二蛋。 金三银四求职季,特地为大家整理出13个 Java 基础面试题,希望能为正在准备或即将参与面试的小伙伴们提供些许帮助。 后续还会整理关于线程、IO、JUC等Java相关面试题,敬请各位持续关注。 这1…

python常见语法

变量赋值: my_var 10 基本数据类型: 整数(int)、浮点数(float)、字符串(str)、布尔值(bool)、列表(list)、元组(tuple&…

myql 获取二维数组字符串的最后一个值

继续《mysql 存储过程和函数》的实战: 要分离字符串:[["1","1007","1007012"],["5","5005"],["6","6002","6002005"],["7","7003"],["8&quo…

零基础入门学习Python第一阶10图形用户界面和游戏开发

图形用户界面和游戏开发 基于tkinter模块的GUI GUI是图形用户界面的缩写,图形化的用户界面对使用过计算机的人来说应该都不陌生,在此也无需进行赘述。Python默认的GUI开发模块是tkinter(在Python 3以前的版本中名为Tkinter)&…

Python-VBA函数之旅-getattr函数

目录 一、getattr函数的常见应用场景: 二、getattr函数使用注意事项: 1、getattr函数: 1-1、Python: 1-2、VBA: 2、推荐阅读: 个人主页:https://blog.csdn.net/ygb_1024?spm1010.21…

Linux进程详解三:进程状态

文章目录 进程状态Linux下的进程状态运行态-R阻塞态浅度休眠-S深度睡眠-D暂停状态-T暂停状态-t 终止态僵尸-Z死亡-X 孤儿进程 进程状态 进程的状态,本质上就是一个整型变量,在task_struct中的一个整型变量。 状态的存在决定了你的后续行为动作。 Linu…