【问题标题】:SQL Query beginner needing advice on filteringSQL Query 初学者需要关于过滤的建议
【发布时间】:2018-07-31 12:37:07
【问题描述】:

我正在尝试组合一个查询,该查询可以过滤掉特定的特殊字符,并添加条件,即仅当该特殊字符仅出现一定次数(在本例中为一次)时,它才会为您提供结果。

我当前的查询:

select k.name as 'GroupName'
  , k.Type as 'Factor'
From Kf as k
Join KfChildren as kc on k.ID = kc.id
Join Kf as k1 on kc.ChildID = k1.id
where k.name like ('ASX:%') --special character needed ":"

我正在寻找要返回的查询:

ASX:TRANSPORTATION

而不是:

ASX:TSG:PSG:Rollers

这是可行的吗,还是我应该尝试解决?

提前感谢任何人对此发表任何回复:)

【问题讨论】:

  • 您能提供一些示例数据并期待结果吗?你的 dbms 是什么
  • 您可能会发现这很有用 - stackoverflow.com/questions/12344795/…
  • 在 SQL Server 上,您可以添加类似 and charindex(':', k.name, 5) = 0 的内容
  • 感谢所有回复,@D-Shih:使用 Microsoft SQL Server 2012 作为示例数据说数据库包含:ASX:Transportation 和 ASX:TSG:PSG:Rollers 我只是想让它带来返回第一个,因为它的名称中只有一个冒号
  • @shawnt00:谢谢肖恩,我认为这给了我我需要的东西:)

标签: sql filtering


【解决方案1】:

条款:以 ASX 开头且只有一个 ':'

WHERE k.Name LIKE 'ASX:%'
AND NOT LIKE 'ASX:%:%'

如果需要通配符,请将 ASX 替换为 %

【讨论】:

  • 感谢这个解决方案,@shawnt00 给了我所需的结果。我是 SQL 和 stackoverflow 的新手,所以非常感谢所有提供帮助的人,希望这个评论足以在应得的地方给予赞扬:)
【解决方案2】:

试试这个:

WHERE (upper(k.name) LIKE '%ASX:%'
  AND upper(k.name) NOT LIKE '%:%:%:')

【讨论】:

  • 感谢您的回复,我试过了,似乎我仍然得到包含多个 ':' 冒号的结果。需要以某种方式将结果限制为只有一个冒号的结果
  • 第二种模式允许两个冒号,但不能三个。
【解决方案3】:

试试这个 WHERE k.name LIKE 'ASX[:]%' AND k.name NOT LIKE ‘%:%:%’

如果可行,标记为解决方案。

【讨论】:

  • 感谢您的快速回复,我试过了,看起来我仍然得到带有多个冒号的结果 ':' 需要以某种方式将结果限制为只有一个冒号的结果
猜你喜欢
  • 2022-07-31
  • 2011-04-19
  • 2014-08-30
  • 2022-11-27
  • 1970-01-01
  • 2012-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多