Обрезка ведущих нулей в MS Access SQL
Мне нужно обрезать ведущие нули в столбце с помощью MS Access SQL. Я нашел тему для разговора Лучшие методы для обрезки ведущих нулей в SQL Server? но
SUBSTRING(str_col, PATINDEX('%[^0]%', str_col+'.'), LEN(str_col))
Не работает в Access. Как "перевести" его в Access SQL?
Я изменил функцию SUBSTRING
на MID
и PATINDEX
на INSTR
, но она не работает
MID(str_col, INSTR(1, str_col+'.', '%[^0]%'), LEN(str_col))
Тип данных моего столбца-string, и все строки выглядят так:" 002345/200003"," 0000025644/21113", и мне нужно извлечь" 2345","25644".
3 ответа:
Проверьте, что нули действительно существуют, они могут, если поле является текстом, в этом случае вы можете использовать:
Val(NameOfField)
Результат
Field1 ValField1 ab 0 0000123 123
Если поле числовое, то, вероятно, в таблицу добавлен формат, что является очень плохой идеей.
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), и она вернет обрезку ведущих 0s.
?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
Надеюсь, это поможет кому-то другому