设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
楼主: yanwei82123300
打印 上一主题 下一主题

[查询] 请帮助看看我想提取"G"字母后面的空格后面的两位数字

[复制链接]
11#
 楼主| 发表于 2013-3-15 12:43:14 | 只看该作者
谢谢大家帮助:
请帮助看看如何才能去SR后面的数字呢?谢谢
COMP_DESC
MODULE,SPRING G7-SR3-00
MODULE,SPRING G7-SR4-00
MODULE,SPRING G7-SR4-00*NDT*
MODULE,SPRING G8-SR1-11
MODULE,SPRING G7-SR3-10
MODULE,SPRING G01-SR1-00*NDT*
MODULE,SPRING G7-SR3-00
MODULE,SPRING G7-SR2-00
结果:
3
4
4
1
3
1
32
12#
发表于 2013-3-15 14:48:29 | 只看该作者
yanwei82123300 发表于 2013-3-15 12:43
谢谢大家帮助:
请帮助看看如何才能去SR后面的数字呢?谢谢
COMP_DESC

这是一个典型的正在表达式运用问题,解法很简单:



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
13#
 楼主| 发表于 2013-3-15 15:50:17 | 只看该作者
todaynew 发表于 2013-3-15 14:48
这是一个典型的正在表达式运用问题,解法很简单:

todaynew 谢谢帮助您再看看下面的能否做到:
ITEM                          desc
MVA001-084-27        MODULE,DRIVE G80-SR-00
MVA001-084-27        MODULE,DRIVE G80-SR-00
MVA001-186-01        MODULE,DRIVE G81-SR-00
M118008                          MODULE,DRIVE G70-11
MVA001-032-62        MODULE,DRIVE GC50-SR-00
M151735                           MODULE,DRIVE GC40-SR-00
M143685                          MODULE,DRIVE GC011-00
MVA000-132-90        MODULE,DRIVE GC41-SR-00
M142773                          MODULE,DRIVE G20-SR-00
M142775                          MODULE,DRIVE G30-SR-00
M130361                         MODULE,DRIVE G010-00
结果:
80
81
70
50
40
011
41
20
30
010
14#
发表于 2013-3-15 16:23:15 | 只看该作者
本帖最后由 todaynew 于 2013-3-15 17:15 编辑
yanwei82123300 发表于 2013-3-15 15:50
todaynew 谢谢帮助您再看看下面的能否做到:
ITEM                          desc
MVA001-084-27        MODULE,DRIVE ...

可以这样写查询:
SELECT itemdetail.ITEM, itemdetail.desc, IIf(teststr([desc],"(G|GC)\d+"),ReplaceMatch([desc],"(^.*(?:G|GC))(\d+)(.*$)","$2"),"") AS G后的数字, IIf(teststr([desc],"SR\d+"),ReplaceMatch([desc],"(^.*SR)(\d+)(.*$)","$2"),"") AS SR后的数字
FROM itemdetail;

看到ReplaceMatch([desc],"(^.*(?:G|GC))(\d+)(.*$)","$2"),"")这个函数了吗?这个函数中的正则表达式中有这么个子串:(?:G|GC),这表示G或者GC都可以匹配。

如果还有GA,GB需要匹配的话,则可将这个子串改为::(?:G|GA|GB|GC)。

如果G后面可能是26个大写字母中的一个,则这个子串改写为:G(?:[A-Z])?。

如何处理,可以参见《无关紧要》一文。
15#
 楼主| 发表于 2013-3-18 15:02:09 | 只看该作者
todaynew 发表于 2013-3-15 16:23
可以这样写查询:
SELECT itemdetail.ITEM, itemdetail.desc, IIf(teststr([desc],"(G|GC)\d+"),Replace ...

请大家帮助看看下面这些描述如何能够提取第二个空格后面的数字(G后面数字空格后面的数字)谢谢大家
COMP_DESC
MODULE,PWR G01 12-
ASSY,PWR G2 12*W/JSCR*
MODULE,PWR G5 24
MODULE,PWR G2 10-00
MODULE,PWR G5 28-00
MODULE,PWR G01 10
MODULE,PWR G01 10
ASSY,PWR G01 10*W/JSCR*
MODULE,PWR G7 36
结果:
12
12
24
10
28
10
10
36

16#
 楼主| 发表于 2013-3-18 15:09:29 | 只看该作者
COMP_DESC
MODULE,PWR G4 20-00*PED/ENG*
MODULE,PWR G5 20-00*PED/ENG*
MODULE,PWR G5 20-00*PED/ENG*
MODULE,PWR G5 28-00*PED/ENG*
MODULE,PWR G5 16-00*PED/ENG*
MODULE,PWR G4 20-00*PED/ENG*
MODULE,PWR G01 9*PED*
MODULE,PWR G01 9*PED*
MODULE,PWR G01 9*PED*

结果:
20
20
20
28
16
9
9
17#
发表于 2013-3-18 21:45:24 | 只看该作者
正则表达式尚不能掌握使用,还是老办法吧:
Sub xzf()
Dim str As String
Dim rsj As ADODB.Recordset
str = "SELECT Mid([desc],InStrRev([desc],' ')+1) FROM itemdetail"
Set rsj = New ADODB.Recordset
rsj.Open str, CurrentProject.Connection, adOpenStatic, adLockReadOnly

Do While Not rsj.EOF
For i = 1 To Len(rsj.Fields(0))
    If Not IsNumeric(Mid(rsj.Fields(0), i, 1)) Then
        Debug.Print Left(rsj.Fields(0), i - 1)
        Exit For
    End If
Next
rsj.MoveNext
Loop
End Sub
18#
 楼主| 发表于 2013-3-19 08:16:49 | 只看该作者
koutx 发表于 2013-3-18 21:45
正则表达式尚不能掌握使用,还是老办法吧:
Sub xzf()
Dim str As String

koutx 老师取出的结果有问题,见图片

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
19#
发表于 2013-3-19 09:27:24 | 只看该作者
本帖最后由 koutx 于 2013-3-19 09:31 编辑

我试了没问题呀。(提取第二个空格后面的数字)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
20#
 楼主| 发表于 2013-3-19 10:07:13 | 只看该作者
koutx 发表于 2013-3-19 09:27
我试了没问题呀。(提取第二个空格后面的数字)

koutx老师我更新了附件的例子,看看如何才能在查询中使用您做的模块函数呢?能否帮助修改一下例子,谢谢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-31 19:00 , Processed in 0.097472 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表