设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 3273|回复: 9
打印 上一主题 下一主题

[Access本身] [求助]如何查找特定字符在字段中第二次出现的位置

[复制链接]
跳转到指定楼层
1#
发表于 2006-11-17 02:02:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如何查找特定字符在字段中第二次出现的位置



我的一个字段中大部分都是这样的格式

SS AA BB CC

SSSS AA BBBB CC

SSS AAAAA B CCCC

我要取出其中第二个空格与第三个空之间的AA BB来生成新字段

每个空格之间的长度不等。

不知有什么好的方法
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
 楼主| 发表于 2006-11-17 03:03:00 | 只看该作者
谢谢,公式只能取第1个空格与第2个空格之前的字符

如果要取第4个空格和第6之前字符岂不是要写很长的公式,有没有更好的办法?
3#
发表于 2006-11-17 15:59:00 | 只看该作者
思路:用SPLIT分拆字符串,得到数组,用UBOUND、LBOUND判断,直接得到结果。
4#
 楼主| 发表于 2006-11-17 16:47:00 | 只看该作者
SPlit好象无法直接在查询语句中使用,看来真的没有直接的办法
5#
发表于 2006-11-17 18:10:00 | 只看该作者
以下是引用zhang81524在2006-11-17 8:47:00的发言:


SPlit好象无法直接在查询语句中使用,看来真的没有直接的办法

只能在VBA中使用,而且是最简单的方法。
6#
发表于 2006-11-17 19:12:00 | 只看该作者
7#
 楼主| 发表于 2006-11-17 20:54:00 | 只看该作者
谢谢,我用了自定义函数

Public Function MidX1(strInput As String, _
                             starnumber As Long, _
                             endnumber As Long) _
                     As String
'------------------------------------------------------------------------------------------

'为了取特定的空格之间的字符

'用法是midX(所选字段,第X次出现的空格,第y次出现的空格)

'例如 midx1("AA BBBB CC DDD",2,3)  =CC

'例如 midx1("AA BBBB CC DDD",1,3)  =BBBB CC

'------------------------------------------------------------------------------------------
  
  strlong = Len(strInput)

i = InStr(1, strInput, " ", vbBinaryCompare)

If IsNull(i) Then
  GoTo 2
  Else
    N = 0
   
End If

  
  
  Do While i <> 0 ' InStrRev(strInput, " ", -1, 1)
  
        N = N + 1
        
        If N = starnumber Then starn1 = i
        
         If N = endnumber Then
        
             starn2 = i
            
             GoTo 1
         Else
         End If
         
         
        
         i = InStr(i + 1, strInput, " ", vbBinaryCompare)

         
  Loop


If i = 0 And N < endnumber Then
   
   MidX1 = Mid$(strInput, starn1 + 1, strlong - starn1)
   
   Else
1
MidX1 = Mid$(strInput, starn1 + 1, starn2 - starn1)

2 End If
  
End Function

[此贴子已经被作者于2006-11-17 12:56:05编辑过]

8#
发表于 2006-11-17 22:48:00 | 只看该作者
try:

fg = "AA BBBB CC DDD"
tt = ""
rt = Split(fg, " ")
For I = LBound(rt) To UBound(rt)
MsgBox rt(I) & I
Next
For I = 1 To 3 - 1
tt = tt + rt(I) + " "
Next
MsgBox tt

你可以做成函数调用
9#
发表于 2006-11-18 03:16:00 | 只看该作者
以下是引用wwwwa在2006-11-17 14:48:00的发言:


try:

fg = "AA BBBB CC DDD"
tt = ""
rt = Split(fg, " ")
For I = LBound(rt) To UBound(rt)
MsgBox rt(I) & I
Next
For I = 1 To 3 - 1
tt = tt + rt(I) + " "
Next
MsgBox tt

你可以做成函数调用

Split函数,返回一个下标从零开始的一维数组。

所以LBound(rt)可以不要了,直接用0。
10#
 楼主| 发表于 2006-11-20 19:18:00 | 只看该作者
谢谢了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-17 00:34 , Processed in 0.086287 second(s), 33 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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