我需要使用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"。
答案 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.
但要小心。迟早会出现一些非数字化的东西会通过导致无效的演员表进入并破坏事物。如果可能,将列转换为整数类型并将格式保留为客户端。