【问题标题】:SQL selecting for a unique characterSQL 选择唯一字符
【发布时间】:2013-02-14 15:15:38
【问题描述】:

在 sql 中,我想获取所有行,其中斜杠“/”作为字符仅存在一次。

例如:

[table1]
id | path_name  |
 1 | "/abc/def/"|
 2 | "/abc"     |
 3 | "/a/b/cdfe"|
 4 | "/hello"   |

select * from table1 where path_name=.... ;

所以在这个例子中,我只想有第二和第四行...

我必须如何形成这份声明?

【问题讨论】:

  • 使用像'%/%'而不像'%/%/%'

标签: sql select


【解决方案1】:
where path_name like '%/%' and path_name not like '%/%/%'

where len(path_name) = len(replace(path_name,'/','')) + 1

【讨论】:

    【解决方案2】:

    要找到一个只有一个斜线的表达式:

    where path_name like '%/%' and not path_name like '%/%/%'
    

    解释:第一个检查斜线是否至少出现一次。第二个检查它没有出现两次。

    至少一次,但少于两次,就是一次。

    如果您只想要以斜线开头的那些,您应该将第一个模式更改为'/%'

    【讨论】:

      【解决方案3】:
      select * from table1 where path_name not like '/%/%' and path_name not like '/%/';
      

      【讨论】:

        【解决方案4】:

        或者将 / 替换为空后计算长度。
        WHERE ( LENGTH(col) - LENGTH(REPLACE(col, '/', '')) )=1

        (感谢How to count instances of character in SQL Column

        【讨论】:

          【解决方案5】:
          1.select * from Table1 where len(path_name)-len(replace(path_name,'/',''))= 1
          
          2.select * from table1 where len(path_name)= len(replace(path_name,'/',''))+1
          
          3.select * from table1 where path_name like '%/%' and path_name not like'%/%/%'
          

          【讨论】:

          • 请至少解释一下你的答案。
          • len(path_name)-len(replace(path_name,'/','')) ----- 这个语句 lenth 是 1 个示例视图 @为什么我只需要一个 '/' .. .1.首先我找到长度然后我 - (减去) / 字符的替换长度
          • 感谢您提供此代码 sn-p,它可能会提供一些有限的即时帮助。一个正确的解释would greatly improve 其长期价值通过展示为什么这是解决问题的好方法,并将使其对未来有其他类似问题的读者更有用。请edit您的回答添加一些解释,包括您所做的假设。你应该提到一些关于效率的事情,以及任何可能提高效率的索引。
          猜你喜欢
          • 2021-07-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-02-14
          • 1970-01-01
          • 2018-09-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多