【问题标题】:How can I find all paths where the path does not include a specific number?如何找到路径不包含特定数字的所有路径?
【发布时间】:2017-12-14 08:30:04
【问题描述】:

我有一个包含路径列和客户端列的表。我想找到路径中任何地方都找不到 Client No 的行。

表格列:

路径

Z:_IMANAGE 只读\47640-001 - 002 - Blue Buffalo Company\47640.001 -- Blue Buffalo\E-Mail Correspondence\Internal\2766005.1-RE-Invoices.MSG

Client 47640

Matter 1

到目前为止我所拥有的:

select Path, Client, Matter
from DocData
where Imported = 'Y'
  and Path Not Like '%' + (select top 1 cast(Client as nvarchar(10)) from DocData) + '%'

【问题讨论】:

  • 这里的大多数人想要格式化的文本,而不是图像。
  • 标记您正在使用的 dbms。该查询是特定于产品的。
  • 子查询的意义何在?你在使用 SQL Server 吗?
  • 是的,我使用的是 SQL Server。子查询的重点是比较两列。一个需要在另一个中找到。如果这有意义的话。

标签: sql sql-server subquery


【解决方案1】:

我不明白您为什么使用子查询,以下应该可以工作:

select Path, Client, Matter
from DocData
where Imported = 'Y'
  and Path Not Like '%' + cast(Client as nvarchar(10)) + '%'

【讨论】:

  • 谢谢。那行得通。我一定很累。我严重过度复杂化了。
【解决方案2】:

尝试使用CHARINDEX() 函数。

CREATE TABLE TestPath
(
[Path] Nvarchar(100),
[Id] int,
Matter bit
)

Insert INTO TestPath
Values
('C:\Test\SQL_Query\47641_001_Blue_Red',47641,1),
('C:\Test\SQL_Query\47642_001_Blue_Red',47642,1),
('C:\Test\SQL_Query\47643_001_Blue_Red',47643,1),
('C:\Test\SQL_Query\47646_001_Blue_Red',47644,1),
('C:\Test\SQL_Query\47649_001_Blue_Red',47645,1)

select [Path], id, Matter
from TestPath
where CHARINDEX(Cast(Id as Varchar(10)),[Path])<>0

这会得到你想要的结果。

【讨论】:

  • 谢谢。这也奏效了。从 DocData 中选择 Path、Client、Matter,其中 Charindex(Cast(Client as NVarchar(10)),Path,0) = 0 And Imported = 'Y'
【解决方案3】:

您的查询运行良好,您的ncarchar 有错误我认为您的意思是nvarchar(可以正常工作)

我不会使用你自己的查询,即使它没有错。它不会返回您需要的值。

改用不带子查询的缩短查询

更改以下内容

select Path, Client, Matter
from DocData
where Imported = 'Y'
  and Path Not Like '%' + (select top 1 cast(Client as ncarchar(10)) from DocData) + '%'

收件人(如果您想修复错误)

select Path, Client, Matter
from DocData
where Imported = 'Y'
  and Path Not Like '%' + (select top 1 cast(Client as nvarchar(10)) from DocData) + '%'

不带子查询的正确查询

(使用(您自己的查询)您永远不知道要比较哪一行的前 1 个子查询)

select Path, Client, Matter
from DocData
where Imported = 'Y'
  and Path Not Like '%' + cast(Client as nvarchar(10)) + '%'

【讨论】:

  • 谢谢。除了错字,还有人指出我不需要子查询。
  • “子查询没有真正的额外价值”不仅没有增加价值,而且明显是错误的。使用top 1 子查询,您永远不知道要比较哪一行。
  • 不应使用子查询,因为它最有可能不会返回与您比较的行相同的行
  • @HoneyBadger 这实际上是一个非常好的评论,我将其添加到答案中
猜你喜欢
  • 2011-04-03
  • 1970-01-01
  • 1970-01-01
  • 2012-02-24
  • 2016-06-26
  • 2021-11-13
  • 2012-02-12
  • 1970-01-01
相关资源
最近更新 更多