Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server条件where子句,以防未提取行_Sql Server_Database_Stored Procedures - Fatal编程技术网

Sql server SQL Server条件where子句,以防未提取行

Sql server SQL Server条件where子句,以防未提取行,sql-server,database,stored-procedures,Sql Server,Database,Stored Procedures,我有一个表,其中包含IP的精确或隐藏,例如: 192.168.99.5是一个精确的IP和 192.168.99.*或192.*.*.7是屏蔽IP的示例 我需要创建一个查询,返回匹配的ip,我将给出一个示例 假设我的数据库中有一个192.168.99.*条目 如果我想跑 select * from myTable where IP = '192.168.99.65' 它应该返回行,因为IP的最后一段是通配符,所以任何数字都应该匹配 但如果我跑 select * from myTable

我有一个表,其中包含IP的精确或隐藏,例如:

  • 192.168.99.5
    是一个精确的IP和
  • 192.168.99.*
    192.*.*.7
    是屏蔽IP的示例
我需要创建一个查询,返回匹配的ip,我将给出一个示例

假设我的数据库中有一个
192.168.99.*
条目

如果我想跑

select * 
from myTable 
where IP = '192.168.99.65'
它应该返回行,因为IP的最后一段是通配符,所以任何数字都应该匹配

但如果我跑

select * 
from myTable 
where IP = '192.169.99.65'
它不能检索该行

我也需要这是有效的


正确的方法是什么?

在哪里?替换(ip“*”、“%”)
?屏蔽ip如何发挥作用?例如,是否存在查询类似于
192.168.99.65
的内容并希望返回
192…65
?此外,您是否曾经查询过或您的ip是否曾经类似于
*.xxx.xxx.xxx
,或者星号是否只出现在ip的末尾?@ZLK在表中,我们将存储192.168.99.65之类的值或192.168.*.65之类的ip掩码(掩码可以在任何地方)。另一个合法值是..*,表示每个ip。当用户查询该表时,它总是带有一个完整的IP(一个没有“*”的IP,例如192.168.99.65),我需要返回完全匹配的行,或者通过maskOne选项添加一个持久化的计算列(并为其编制索引)。例如,
ALTER TABLE dbo.mytable将通配符添加为强制转换(当子字符串(IP,1,1)为“%”时的大小写,然后“%”ELSE”结束+替换(替换(替换(替换(IP,“*”,“%”),“…”,“.%.”,“…”,“...”时的大小写,然后“%”结束为VARCHAR(15))(它看起来很复杂,但基本上只是用%符号替换空白/星号)。然后您可以使用类似于
的东西查询它,其中@val类似于WildcardIP
。我不确定与其他选项相比,它的性能究竟如何,但它应该相对较快。