一、学员问题描述:
请老师指教,系统中开户银行及账号是在一起的,能分开吗?有空的赐教一下,开户银行的汉字拆分出来,银行账号的数字(其实是文本型)拆分出来?如下图:
数据模拟化如下:
A
张三11111
李四三11131210
王王立五01122121
微信学习群里老师纷纷支招,对比下来,处理方式最快捷是用正则直接提取文字和文本就行,因为字符很有规律,前半截是文本,后半截是数字。
但考虑到有些不会vba的学员,因此我尝试用函数的方式来解决。
想到val函数可以提取数字,StrReverse 可以翻转文本 那是不是可以先把文本反转,然后把数字提取后再反转回去,从而达到效果呢。经测试,能实现效果。
方式及思路如下:
1、将文本后缀加一个非0数字,防止以0结尾的数字,反转后丢失了末尾数字0 例如张三111110 转变了张三1111101
2、将得到的新文本用StrReverse反转 得到1011111三张,用val提取前面的数字 得到1011111
3、数字处理,重新反转得到的数字,重到1111101,并用left函数截取,不取最后一位 得到11110
4、用left函数取文本,截取不包含数字的部分。
代码如下:
SELECT 表1.A, [A] & 1 AS 辅助用, Left(StrReverse(Val(StrReverse([A] & 1))) ,Len(StrReverse(Val(StrReverse([A] & 1))))-1) AS 账号, Left(a,len(a)-Len(Left(StrReverse(Val(StrReverse([A] & 1))),Len(StrReverse(Val(StrReverse([A] & 1))))-1))) AS 姓名
FROM 表1;
案例如下:
点击下载此附件
通过查询实现的方法:
拆分后的结果: