В MS Access у меня есть следующий запрос, чтобы удалить все 0 слева от столбца [IDENTIFIER_1], но я должен определить каждый случай (если слева 10 нулей, тогда сделайте подстроку от 11 символов до конца, если есть 9 нулей слева затем составляют подстроку от 10 до конца и так далее ....)
У меня есть такой запрос:
SELECT YEAR(a.[First Date]) AS [N Year], Month(a.[First Date]) AS [N Month],
IIF( inStr(a.[IDENTIFIER_1], '0000000000')=1, MID(a.[IDENTIFIER_1],11,LEN(a.[IDENTIFIER_1])) ,
IIF( inStr(a.[IDENTIFIER_1], '000000000')=1, MID(a.[IDENTIFIER_1],10,LEN(a.[IDENTIFIER_1])) ,
IIF( inStr(a.[IDENTIFIER_1], '00000000')=1, MID(a.[IDENTIFIER_1],9,LEN(a.[IDENTIFIER_1])) ,
IIF( inStr(a.[IDENTIFIER_1], '0000000')=1, MID(a.[IDENTIFIER_1],8,LEN(a.[IDENTIFIER_1])) ,
IIF( inStr(a.[IDENTIFIER_1], '000000')=1, MID(a.[IDENTIFIER_1],7,LEN(a.[IDENTIFIER_1])) ,
IIF( inStr(a.[IDENTIFIER_1], '00000')=1, MID(a.[IDENTIFIER_1],6,LEN(a.[IDENTIFIER_1])) ,
IIF( inStr(a.[IDENTIFIER_1], '0000')=1, MID(a.[IDENTIFIER_1],5,LEN(a.[IDENTIFIER_1])) ,
IIF( inStr(a.[IDENTIFIER_1], '000')=1, MID(a.[IDENTIFIER_1],4,LEN(a.[IDENTIFIER_1])) ,
IIF( inStr(a.[IDENTIFIER_1], '00')=1, MID(a.[IDENTIFIER_1],3,LEN(a.[IDENTIFIER_1])) ,
IIF( inStr(a.[IDENTIFIER_1], '0')=1, MID(a.[IDENTIFIER_1],2,LEN(a.[IDENTIFIER_1])) , a.[IDENTIFIER_1]
) ) ) ) ) ) ) ) ) )
FROM Table1 as a;
но мне интересно, есть ли форма, подобная java, в которой вы можете создать какой-либо шаблон или регулярное выражение, избегая всего этого кода. Что-то вроде Pattern [0] + или чего-то, что заменяет этот код. Я также пытаюсь сделать что-то вроде этого: например, "[0] + [1-9]", но я не мог найти способ заставить его работать.
Примеры IDENTIFIER_1 могут быть: 000PP2003 или 0006760007, и мне нужно, чтобы они изменились на PP2003 и 6760007. Может случиться так, что появятся некоторые нули или пустые значения.
IDENTIFIER_1 содержит только цифры? Могут ли у вас быть строки, в которых он равен нулю или содержит пустую строку (нулевой длины)?
Он также может содержать буквы. Примеры IDENTIFIER_1 могут быть: 000PP2003 или 0006760007, и мне нужно, чтобы они изменились на PP2003 и 6760007. Может случиться так, что появятся некоторые нули или пустые значения.





Вы можете использовать функцию val. Прочтите Здесь, как val может быть полезен в вашем сценарии.
что-то типа..
SELECT
YEAR(a.[First Date]) AS [N Year],
Month(a.[First Date]) AS [N Month],
val(a.[IDENTIFIER_1]),
a.[IDENTIFIER_1]
FROM Table1 as a;
РЕДАКТИРОВАТЬ:
для замены шаблона см. этот Сообщение, который может быть полезен с этим шаблоном ^[0]*
Спасибо. Он работает очень хорошо, когда это только числа, но он дает мне 0, когда есть несколько букв.
@ user3084383 См. Этот ответ
Проверить эта почта