0

请参阅下面的 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 Notes LIKE '%DID:' + RIGHT('000000' + Door_Supervisors.DID,6) + '%')

4

3 回答 3

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

请注意,此代码假定Notes中的结构化文本是一致的...

于 2013-10-02T14:44:59.370 回答
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)

SQL 小提琴演示

于 2013-10-02T14:51:53.073 回答
0

因为您的要求并不完全清楚,所以我对您想要什么做了一些假设。

  • 您想从两个表中返回值。
  • 注释中有 6 个数字 ( 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]%'
于 2013-10-02T14:59:19.503 回答