在MS Access中,我有以下查询要删除 [IDENTIFIER_1] 列左侧的所有0,但我必须定义每种情况(如果左侧有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这样的形式,您可以制作一些模式或正则表达式,从而避免所有这些代码。诸如模式 [0] + 之类的东西或替代该代码的东西。我也尝试做这样的事情:喜欢'[0] + [1-9]',但我找不到使它起作用的方法。
IDENTIFIER_1的示例可以是:000PP2003或0006760007,我需要将其更改为PP2003和6760007。可能出现一些空值或空值。