如何仅从字段中提取数字并将该值放入其自己的字段中?
例如,如果field1包含值“Name(1234U)”。
我需要一种SQL或VBA方式来扫描该字段并将数字拉出。所以field2将等于“1234”。
有什么想法吗?
答案 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