如何在不使用+的情况下查找1 /个[A-Z]或[0-9]的实例

时间:2019-06-13 09:51:22

标签: sql sql-server regex

我有LN和HN两列字母数字。这是我的数据:

LN        HN
A1        B1
A100      B100
TN73OP1   TN73OP99

我需要编写一个SQL查询/函数,该函数将拆分字母和数字部分,并比较LN的字母部分= HN的字母部分和LN的数字部分= HN的数字部分。但是,我只想要它用于比较只有2个部分并且格式为(a + n)而不是a + n + a + n的数据,即TN73OP1有4个部分,依此类推。我正在使用SQL Server Management Studio

我尝试包含patindex('[A-Z]+[0-9]+[A-Z]+[0-9]+',LN )>0,但是'+'不被接受为“ 1 /更多实例”

 SELECT AB.LN,AB.HN,
 CASE WHEN AB.FirstLN=AB.FirstHN THEN 'YES' ELSE 'NO' END AS  FLAG1
 ,CASE WHEN AB.SecondLN=AB.SecondHN THEN 'YES' ELSE 'NO' END AS  FLAG2
 FROM 
 (SELECT distinct LN
 ,SUBSTRING(LN,0, PATINDEX('%[0-9]%',LN)) AS FirstLN
 ,SUBSTRING(LN, PATINDEX('%[0-9]%',LN),len(LN)) AS SecondLN,HN
 ,SUBSTRING(HN, 0, patindex('%[0-9]%', HN)) AS FirstHN
 ,SUBSTRING(HN, PATINDEX('%[0-9]%',HN),len(HN))AS SecondHN,
 FROM TABLE where PATINDEX('[A-Z]%[0-9]',LN)>0
 and PATINDEX('[A-Z]%[0-9]',HN)>0
 and LN<>HN and LN not like '%-%' and HN not like '%-%' 
 AND LN NOT LIKE '%-%' AND HN NOT LIKE '%-%')AB 

1 个答案:

答案 0 :(得分:0)

  

比较LN的字母部分= HN的字母部分和LN的数字部分= HN的数字部分。但是,我只希望它比较只有2个部分的数据

据我所描述的,您想知道这些值是否有效并且格式为alphas-digits,但不是alphas-digits-alphas。

如果是这样:

select (case when ln like '[A-Z]%[0-9]' and
                  ln not like '[A-Z]%[0-9]%[A-Z]' and
                  ln = hn
             then 'true'
             else 'false'
        end)