我有一列必须从数字和空格中清除,如下所示:
XX =
TERR
6 ST
3 ST
4 ST
AVE
2 PL
2 PL
2 PL
2 PL
4 CT
2 PL
4 ST
3 ST
3 ST
我的意思是,我需要与 Val() 相反的函数,但找不到它。有任何想法吗?谢谢!
我有一列必须从数字和空格中清除,如下所示:
XX =
TERR
6 ST
3 ST
4 ST
AVE
2 PL
2 PL
2 PL
2 PL
4 CT
2 PL
4 ST
3 ST
3 ST
我的意思是,我需要与 Val() 相反的函数,但找不到它。有任何想法吗?谢谢!
确实没有此功能,但只要您的所有文本都采用NUMBER TEXT或TEXT格式(而不是NUMBER TEXT NUMBER),您就可以使用以下内容:
TRIM(Replace(Column, VAL(Column), '')) AS Result
基本上,用VAL
在文本中查找数字,然后用空格替换它,并修剪其余部分。
您需要一个简单的函数,如 inverse ofVal()
来丢弃所有非字母字符。我不知道这样的事情。但是,基于正则表达式的解决方案很容易。下面的函数丢弃所有不是字母的字符。这是应用于您的一些示例输入的函数。
? OnlyAlpha("TERR")
TERR
? OnlyAlpha("6 ST")
ST
? OnlyAlpha(" AVE")
AVE
您需要在 Access 应用程序会话中使用此功能。在从 Access 外部运行的查询中使用时,它将不可用……例如从经典的 ASP、VBScript、Dot.Net 等。
Public Function OnlyAlpha(ByVal strSource As String) As String
Dim re As Object
Set re = CreateObject("VBScript.RegExp")
re.Global = True
re.IgnoreCase = True
re.pattern = "[^a-z]"
OnlyAlpha = re.Replace(strSource, vbNullString)
Set re = Nothing
End Function
一条评论让我想到了性能,所以我提供了这个版本,我认为它的性能应该会更快。
Public Function OnlyAlpha(ByVal strSource As String) As String
' early binding requires reference to Microsoft
' VBScript Regular Expressions:
'Static re As RegExp
' with late binding, no reference needed:
Static re As Object
If re Is Nothing Then
'Set re = New RegExp ' early binding
Set re = CreateObject("VBScript.RegExp") ' late binding
re.Global = True
re.IgnoreCase = True
re.pattern = "[^a-z]"
End If
OnlyAlpha = re.Replace(strSource, vbNullString)
End Function
您可以轻松地将该代码从后期绑定切换到早期绑定。早期绑定在开发过程中很有用,因为它允许 Intellisense 帮助您。在某些情况下,早期绑定可以明显更快。但是,在这种情况下,RegExp
对象会被创建一次,然后重新用于以后对函数的调用。在对象创建期间早期绑定的任何速度优势都应该是无关紧要的。