declare @IPUser as varchar(20) set @IPUser = '202.39.128.0' SELECT * FROM ( SELECT CAST(SUBSTRING(IPStart, 0, S1) as bigint) * 1000000000 +CAST(SUBSTRING(IPStart, S1+1, S2-S1-1) as bigint) * 1000000 +CAST(SUBSTRING(IPStart, S2+1, S3-S2-1) as bigint) * 1000 +CAST(SUBSTRING(IPStart, S3+1, LEN(IPStart)-S3) as bigint) as IPStart ,CAST(SUBSTRING(IPEnd, 0, E1) as bigint) * 1000000000 +CAST(SUBSTRING(IPEnd, E1+1, E2-E1-1) as bigint) * 1000000 +CAST(SUBSTRING(IPEnd, E2+1, E3-E2-1) as bigint) * 1000 +CAST(SUBSTRING(IPEnd, E3+1, LEN(IPEnd)-E3) as bigint) as IPEnd ,CAST(SUBSTRING(IPUser, 0, C1) as bigint) * 1000000000 +CAST(SUBSTRING(IPUser, C1+1, C2-C1-1) as bigint) * 1000000 +CAST(SUBSTRING(IPUser, C2+1, C3-C2-1) as bigint) * 1000 +CAST(SUBSTRING(IPUser, C3+1, LEN(IPUser)-C3) as bigint) as IPUser FROM ( SELECT IPUser ,CHARINDEX('.',IPUser, 0) as C1 ,CHARINDEX('.',IPUser, CHARINDEX('.',IPUser, 0) + 1) as C2 ,CHARINDEX('.',IPUser, CHARINDEX('.',IPUser, CHARINDEX('.',IPUser, 0) + 1) + 1) as C3 ,Unit ,[ID] ,[IssueDate] ,[IPStart] ,[IPEnd] ,CHARINDEX('.',IPStart, 0) as S1 ,CHARINDEX('.',IPStart, CHARINDEX('.',IPStart, 0) + 1) as S2 ,CHARINDEX('.',IPStart, CHARINDEX('.',IPStart, CHARINDEX('.',IPStart, 0) + 1) + 1) as S3 ,CHARINDEX('.',IPEnd, 0) as E1 ,CHARINDEX('.',IPEnd, CHARINDEX('.',IPEnd, 0) + 1) as E2 ,CHARINDEX('.',IPEnd, CHARINDEX('.',IPEnd, CHARINDEX('.',IPEnd, 0) + 1) + 1) as E3 FROM .[dbo].[IP_Scope] LEFT JOIN (SELECT @IPUser as IPUser ) U ON 1=1 ) A ) B Where IPUser between IPStart and IPEnd
2016/08/25
SQL 判斷使用者IP 是否符合網段要求
單純使用 SQL 語法來檢查使用者 IP 在是在合格的網段中間,查無資料表示不在合格的清單內。本語法只適合檢查 IP v4以"."分隔的IP。
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言