首页 > 解决方案 > 如何编写该 tsql 请求(转换问题)?

问题描述

我有 2 张桌子:

表合约:

IdContract     |  Department    |   IdCompany
-----------------------------------------------------
154            |   6            |   /1150/1420/879/

和表公司:

IdCompany    |   WorkingIdDepartment 
-------------------------------------
1150         |   /17/8/26/

出于某种原因,一些公司被错误地分配到了某些合同:他们与部门 6 签订合同,但他们只在部门 17、8 和 26 工作。我需要找到那些公司。

我尝试以这种方式请求我的数据库:

SELECT * 
FROM tbl_contract ct, tbl_compagny cp
WHERE ct.IdCompany like CONCAT('%/1150/%')
AND ct.Department  NOT IN (17,8,26)

或以动态方式:

SELECT * 
FROM tbl_contract ct, tbl_compagny cp
WHERE ct.IdCompany like CONCAT('%/' , cp.IdCompany , '/%')
AND ct.Department  NOT IN (Right(Left(Replace(WorkingIdDepartment, '/', ','), len(Replace(WorkingIdDepartment, '/', ',')) - 1), len(Left(Replace(WorkingIdDepartment, '/', ','), len(Replace(WorkingIdDepartment, '/', ',')) - 1))-1))

但我的错误是我的请求的最后一部分给我一个字符串:'17,8,26' 而不是几个用逗号分隔的 Int...所以我得到转换错误(我不在这里复制/粘贴我的错误,因为它是法语)

请问我怎样才能达到我的要求?

谢谢你的帮助 !

标签: tsql

解决方案


解决方案是:

SELECT * 
FROM tbl_contract ct, tbl_compagny cp
WHERE ct.IdCompany like CONCAT('%/' , cp.IdCompany , '/%')
AND ct.Department NOT IN (SELECT value from STRING_SPLIT(WorkingIdDepartment, '/'))

它非常“消耗性能”,但它适用于我的数据库设计不佳


推荐阅读