我有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
答案 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)