请参阅下面的DDL:
create table Door_Supervisors (DID int not null, Name varchar(30))
create table general_log (id int not null, Notes varchar(100))
INSERT INTO Door_Supervisors values (1,'ian')
INSERT INTO Door_Supervisors values (2,'Mark')
INSERT INTO General_Log values (1, 'This is a Test 1127678 DID: 000001 DId: 000010')
我想要返回General_Log中提到的所有门监督,即提到1(作为000001)。 256将是:000256。在上述数据的情况下,语句应该返回DID1而不是DID2。我相信我可以使用EXISTS声明。一些变化:
SELECT Door_Supervisors。* FROM Door_Supervisors WHERE EXISTS(SELECT * FROM General_Log WHERE备注LIKE'%DID:'+ RIGHT('000000'+ Door_Supervisors.DID,6)+'%')
答案 0 :(得分:0)
试试这个:
SELECT Ds.*
FROM Door_Supervisors ds
JOIN General_log gl on CAST(substring(Notes,6,9) as Int)=ds.did
SQLFiddle:http://www.sqlfiddle.com/#!3/1fb4c/1
请注意,此代码假定注释中的结构化文本是一致的......
答案 1 :(得分:0)
你可以使用它 -
SELECT ds.DID, ds.[Name]
FROM Door_Supervisors ds
INNER JOIN general_log gl ON ds.DID = CAST(reverse(left(reverse(gl.notes), charindex(':',reverse(gl.notes), 1) - 1)) AS INT)
答案 2 :(得分:0)
因为你的要求并不完全清楚,所以我对你想要的东西做了一些假设。
123456
)的模式。-
SELECT *
FROM Door_Supervisors
INNER
JOIN General_Log
ON General_Log.Notes LIKE '%' + Right('000000', Cast(Door_Supervisors.DID as varchar(6)), 6) + '%'
WHERE General_Log.Notes LIKE '%[0-9][0-9][0-9][0-9][0-9][0-9]%'