在SQL select语句中使用正则表达式来查找11位数字

时间:2015-06-12 11:20:29

标签: sql sql-server regex

我正在尝试使用SQL匹配正则表达式,我只能返回其AccountNumber为11位的帐户的详细信息。我使用了以下内容,但它似乎不起作用:

 select New_New_AccountNumber, New_PremiseNo, New_FirstName, New_LastName         
 from AccountExtensionBase
 where New_AccountNumber like '^\d{11}$'
 and New_AccountStage = 7
 order by New_FirstName

4 个答案:

答案 0 :(得分:4)

SQL Server 2008不支持使用LIKE或其他任何内容的正则表达式,它仅使用简单模式匹配通配符。

简单选项;

select * from t where f like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'

答案 1 :(得分:3)

正则表达式不起作用,但可以简单地将其替换为ISNUMERICLEN,如下所示:

with open(filename, 'rb+') as f:

    while True:         
        line = f.readline()
        if not line: break        
        if '=2' in line:
                f.seek(-len(line),1)
                f.write(line.split('=2')[0]+'=6')
                f.flush()

答案 2 :(得分:2)

这类似于where len(New_AccountNumber) = 11 and New_AccountNumber not like [^0-9] ,但它只允许数字:

<div class="wrap>
    <iframe src="../path"></iframe>
</div>

.wrap { 
    overflow: auto;
}

iframe, object, embed {
    min-height: 100%;
    min-width: 100%;
    overflow: auto;
}

即长度为11,不包含非数字字符。

答案 3 :(得分:0)

我认为这可能会有所帮助

select New_New_AccountNumber, New_PremiseNo, New_FirstName, New_LastName
from AccountExtensionBase
where New_AccountNumber REGEXP '^[0-9]{11}$'
and New_AccountStage = 7
order by New_FirstName

上面使用MySQL的例子,如果有人需要它可以使用。

这适用于SQL Server,我已经使用2012版测试过,对于不同的版本(2005,2008,...),它可能需要一些更正。

select New_New_AccountNumber, New_PremiseNo, New_FirstName, New_LastName
from AccountExtensionBase
where New_AccountNumber not like '%.%' and ISNUMERIC(New_AccountNumber)=1 and LEN(New_AccountNumber)=11
and New_AccountStage = 7
order by New_FirstName