Обрезка ведущих нулей в 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 3

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

Надеюсь, это поможет кому-то другому

Если все записи в столбце varchar числовые, то можно просто умножить строку на 1.

Но будьте осторожны. Рано или поздно что-то нечисловое проникнет внутрь и сломает вещи, вызвав недопустимое приведение. Если возможно, преобразуйте столбец в целочисленный тип и предоставьте форматирование клиенту.