如何仅从文本字段中选择数字

时间:2014-01-22 15:17:49

标签: sql vba ms-access ms-access-2007 access-vba

如何仅从字段中提取数字并将该值放入其自己的字段中?

例如,如果field1包含值“Name(1234U)”。

我需要一种SQL或VBA方式来扫描该字段并将数字拉出。所以field2将等于“1234”。

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

以下VBA功能可能会起到作用:

Option Compare Database
Option Explicit

Public Function RegexReplaceAll( _
        OriginalText As Variant, _
        Pattern As String, _
        ReplaceWith As String) As Variant
    Dim rtn As Variant
    Dim objRegExp As Object  ' RegExp

    rtn = Null
    If Not IsNull(OriginalText) Then
        Set objRegExp = CreateObject("VBScript.RegExp")  ' New RegExp
        objRegExp.Pattern = Pattern
        objRegExp.Global = True
        rtn = objRegExp.Replace(OriginalText, ReplaceWith)
        Set objRegExp = Nothing
    End If
    RegexReplaceAll = rtn
End Function

使用正则表达式模式的示例

[^0-9]+

匹配一个或多个非数字字符

RegexReplaceAll("Name(1234U)","[^0-9]+","")

返回

1234

编辑:

要在查询中从Access应用程序本身中运行,请尝试类似

的内容
SELECT Field1, RegexReplaceAll(Field1,"[^0-9]+","") AS JustNumbers
FROM Table1;

答案 1 :(得分:2)

这个或变体可能适合:

 SELECT t.Field1, Mid([Field1],InStr([field1],"(")+1,4) AS Stripped
 FROM TheTable As t

例如:

 UPDATE TheTable AS t SET [field2] = Mid([Field1],InStr([field1],"(")+1,4);

编辑重新评论

如果字段结束u),即alpha括号,您可以说:

 UPDATE TheTable AS t SET [field2] =
 Mid([Field1],InStr([field1],"(")+1,Len(Mid([Field1],InStr([field1],"(")))-3)

答案 2 :(得分:0)

创建一个VBA函数,将其称为查询中的一个字段,并将其传递给原始字段(如select GetNumerals(field1) from table...)。 VBA函数将遍历字段中的每个字母并仅返回数值。它可能看起来像这样:

Public Function GetNumerals(str As String) As String

Dim i As Integer

    For i = 1 To Len(str)
        If IsNumeric(Mid(str, i, 1)) Then
            GetNumerals = GetNumerals & Mid(str, i, 1)
        End If
    Next i

End Function