对于以下数据(嗯..团队基础服务器表中有更多节点我需要参考。下面只是一个示例)
Nodes
------------------------
\node1\node2\node3\
\node1\node2\node5\
\node1\node2\node3\node4\
\node1\node2\node3\node4\node5\
我想知道我是否可以应用类似的东西(下面的查询没有给出所需的结果)
select * from table_a where nodes like '\node1\node2\%\'
获取以下数据
\node1\node2\node3\
\node1\node2\node5\
之类的东西(下面没有给出所需的结果)
select * from table_a where nodes like '\node1\node2\%\%\'
获取
\node1\node2\node3\
\node1\node2\node5\
\node1\node2\node3\node4\
可以使用喜欢运算符完成上述操作吗? PLS。建议。
由于
答案 0 :(得分:1)
你需要结合两个词,LIKE和NOT LIKE:
select * from table_a where
nodes like '\node1\node2\%\' AND
nodes NOT like '\node1\node2\%\%\'
第一个查询的,第二个查询的类似解决方案。这是“普通SQL”。例如,可能有SQL Server特定的函数来计算列中“\”字符的数量。
答案 1 :(得分:0)
看起来这样可行(基本上只是消除了最后一个反斜杠):
select * from table_a where nodes like '\node1\node2\%\%'
修改强>
你也可以试试这个:
select * from table_a where
nodes like '\node1\node2\%\' or
nodes like '\node1\node2\%\%\'
答案 2 :(得分:0)
也许使用分隔符来获取结果。 目前还不清楚你实际上想要得到什么,但你可以使用
substr
用于计算或查找分隔符'/'字符的位置。
答案 3 :(得分:0)
派对有点晚了,但似乎问题依然存在。可能是反斜杠正在逃避百分号的通配符含义吗?反斜杠n也可以被解释。
答案 4 :(得分:0)
sql-server不知道单个字符的通配符吗?
select * from table_a
where nodes LIKE '#node1#node2#node_#';
nodes
---------------------
#node1#node2#node5#
#node1#node2#node3#
我在postgresql上测试了这个,很难插入反斜杠,这就是我用#替换它们的原因。
这是另一种可能性 - 否定多个反斜杠(为方便起见使用#):
SELECT * FROM table_a
WHERE (nodes LIKE '#node1#node2#%#'
AND NOT nodes LIKE '#node1#node2#%#%#');
在postgresql上,也有可能匹配模式,SIMILAR TO或〜:
SELECT * FROM table_a
WHERE nodes SIMILAR TO '#node1#node2#[^#]*#';
nodes
---------------------
#node1#node2#node5#
#node1#node2#node3#
[]封装一组可选的允许字符,例如[aeiou]将是一个小写的声音。但是当插入符号是括号中的第一个符号时,符号被否定,因此除了小写的声音之外,[^ aeiou]意味着什么,而[^#]意味着除了#之外的任何东西。 该表达式后面的星号表示前面的符号可以随意出现,0到100万次。 (+意味着至少一次,?意味着0或1次)。
所以'#node1#node2#[^#] *#'的意思是'#node1#node2#',后面跟着哈希,0或单次或多次,然后最后是一个哈希。