在SELECT中删除非数字字符

Dan*_*ett 8 regex sql ms-access ms-access-2007

在MS Access 2007项目报告中,我有以下(编辑)查询:

SELECT SomeCol FROM SomeTable
Run Code Online (Sandbox Code Playgroud)

问题是,SomeCol显然包含一些不可见的字符.例如,我看到一个结果返回123456SELECT LEN(SomeCol)返回7.当我将结果复制到Notepad ++时,它显示为?123456.

该列设置为TEXT.我无法控制这种数据类型,所以我无法改变它.

如何修改我的SELECT查询以去除任何非数字.我怀疑正则表达式是要走的路...另外,有一个CASTCONVERT功能?

Han*_*sUp 9

你提到过使用正则表达式.确实,Access的db引擎不直接支持正则表达式.但是,您似乎愿意在查询中使用VBA用户定义的函数......并且UDF可以使用正则表达式方法.与迭代输入字符串的每个字符并仅存储要保留在新输出字符串中的字符相比,该方法应该简单,容易且执行速度更快.

Public Function OnlyDigits(ByVal pInput As String) As String
    Static objRegExp As Object

    If objRegExp Is Nothing Then
        Set objRegExp = CreateObject("VBScript.RegExp")
        With objRegExp
            .Global = True
            .Pattern = "[^\d]"
        End With
    End If
    OnlyDigits = objRegExp.Replace(pInput, vbNullString)
End Function
Run Code Online (Sandbox Code Playgroud)

以下是立即窗口中该函数的示例,其中"x"字符作为不可见字符的代理.(任何未包含在"digits"字符类中的字符都将被丢弃.)

? OnlyDigits("x1x23x")
123
Run Code Online (Sandbox Code Playgroud)

如果这是您想要的输出,只需在查询中使用该函数即可.

SELECT OnlyDigits(SomeCol) FROM SomeTable;
Run Code Online (Sandbox Code Playgroud)