如何从字段中只提取数字并将该值放入其自己的字段中?如何仅从文本字段中选择数字
例如,如果field1包含值“Name(1234U)”。
我需要一个SQL或VBA的方式来扫描该字段并将其拉出。所以field2将等于“1234”。
任何想法?
如何从字段中只提取数字并将该值放入其自己的字段中?如何仅从文本字段中选择数字
例如,如果field1包含值“Name(1234U)”。
我需要一个SQL或VBA的方式来扫描该字段并将其拉出。所以field2将等于“1234”。
任何想法?
这是可能的,这或变化可满足:
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)
,也就是阿尔法支架,你可以说:
UPDATE TheTable AS t SET [field2] =
Mid([Field1],InStr([field1],"(")+1,Len(Mid([Field1],InStr([field1],"(")))-3)
我怎样才能调整这是动态的,并允许一个字段有3个数字,也许5个数字在一起? –
例如,一个字段可能包含“名称(12345U)” –
那就是票! ;)谢谢@Remou –
下面的VBA功能可能达到目的:使用正则表达式模式
[^0-9]+
相匹配的一个或多个非数字字符
RegexReplaceAll("Name(1234U)","[^0-9]+","")
返回
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
实施例
1234
编辑:
从接入应用程序本身内查询运行使用,尝试像
SELECT Field1, RegexReplaceAll(Field1,"[^0-9]+","") AS JustNumbers
FROM Table1;
创建一个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
感谢RedAces,虽然在mySQL中有效,但我需要SQL或VBA for MS Access 2007.值可以在字段中不同,但数字将始终在一起。所以它可能是默认的(4321U)或其他东西(7263A) –
谁曾经投票关闭,请注意SQL是一个通用术语,Access SQL与MySQL或SQL Server不一样。 – Fionnuala