如何找到路径中不包含特定数字的所有路径?

时间:2017-12-14 08:30:05

标签: sql sql-server subquery

我有一个包含Path列和Client列的表。我想找到无法在路径中的任何位置找到客户端的行。

表格列:

路径

  

Z:_IMANAGE READ ONLY \ 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) + '%'

3 个答案:

答案 0 :(得分:4)

我不明白你使用子查询的原因,以下内容应该有效:

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

答案 1 :(得分:1)

您的查询工作正常,您的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)) + '%'

答案 2 :(得分:1)

尝试使用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

这将为您提供所需的结果。