В 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
содержит только цифры? Могут ли у вас быть строки, в которых он равен Null или содержит пустую строку (нулевой длины)? - person HansUp   schedule 21.08.2018