Access中的模式或正则表达式

时间:2018-08-21 10:34:14

标签: regex database ms-access

在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。可能出现一些空值或空值。

1 个答案:

答案 0 :(得分:1)

您可以使用val功能。阅读Here 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;

编辑: 有关模式替换的信息,请参见此Post,此模式对^[0]*

可能有用