我有一个列必须从数字和空格中清除,如下所示:
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()相反的功能,但找不到它。有任何想法吗? 谢谢!
答案 0 :(得分:3)
确实没有这方面的功能,但只要您的所有文字都采用 NUMBER TEXT 或 TEXT 格式(而不是 NUMBER TEXT NUMBER ),您可以使用以下内容:
TRIM(Replace(Column, VAL(Column), '')) AS Result
基本上,使用VAL
查找文本中的数字,然后将其替换为空格,然后修剪其余部分。
答案 1 :(得分:1)
你想要一个像Val()
的逆的简单函数来丢弃所有非字母字符。我什么都不知道。但是,基于正则表达式的解决方案很容易。下面的函数丢弃所有非字母的字符。以下是适用于某些示例输入的函数。
? 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
对象被创建一次,然后重新用于以后调用该函数。在对象创建过程中,早期绑定的任何速度优势应该是无关紧要的。