修剪MS Access SQL中的前导零

时间:2015-09-15 09:53:04

标签: sql ms-access

我需要使用MS Access SQL修剪列中的前导零。 我找到了这个话题 Better techniques for trimming leading zeros in SQL Server?

SUBSTRING(str_col, PATINDEX('%[^0]%', str_col+'.'), LEN(str_col))

在Access中不起作用。如何"翻译"它来访问SQL?

我将功能SUBSTRING更改为MID,将PATINDEX更改为INSTR,但它不起作用

MID(str_col, INSTR(1, str_col+'.', '%[^0]%'), LEN(str_col))

我的列的数据类型是字符串,所有行看起来像:" 002345/200003"," 0000025644/21113"我需要提取" 2345"," 25644"。

3 个答案:

答案 0 :(得分:3)

检查零是否真的存在,如果字段是文本,则可以使用:

Val(NameOfField)

结果

Field1  ValField1
ab      0
0000123 123

如果该字段是数字,您可能会在表格中添加一种格式,这是一个非常糟糕的主意。

答案 1 :(得分:0)

vba.Instr将无法匹配模式。如果您的数据列包含字母或任何字符串,并且您仍希望修剪前导零,则可以使用正则表达式。

这是一个示例代码:

Public Function FN_TRIM_LEADING_ZEROS(iValue As String) As String
    Const mExpr As String = "^[0]*" 'all leading 0s to match

    Dim mOBJ As Object
    Set mOBJ = VBA.CreateObject("vbscript.RegExp")

    mOBJ.Pattern = mExpr
    mOBJ.ignorecase = True
    FN_TRIM_LEADING_ZEROS = mOBJ.Replace(iValue, "")

End Function

只需通过fn_trim_leading_zeros(Value)调用该函数,它将返回修正前导0。

?FN_TRIM_LEADING_ZEROS("00000000subString.AnotherString")
subString.AnotherString

或尝试这种递归模式:

Public Function FN_VBA_TRIM_LEADING_ZEROS(iValue As String) As String
    If VBA.Left(iValue, 1) = "0" Then
        iValue = VBA.Right$(iValue, VBA.Len(iValue) - 1)
        FN_VBA_TRIM_LEADING_ZEROS = FN_VBA_TRIM_LEADING_ZEROS(iValue)
    Else
        FN_VBA_TRIM_LEADING_ZEROS = iValue
    End If
End Function

希望这有助于其他人

答案 2 :(得分:0)

如果varchar列中的所有记录都是数字,那么您可以简单地将字符串乘以1.

但要小心。迟早会出现一些非数字化的东西会通过导致无效的演员表进入并破坏事物。如果可能,将列转换为整数类型并将格式保留为客户端。