存在SQL以搜索自由文本

存在SQL以搜索自由文本,sql,sql-server,Sql,Sql Server,请参见下面的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 Gene

请参见下面的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')
我想返回一般日志中提到的所有门主管,即1被称为000001。256将是:000256。对于上面的数据,语句应该返回DID1而不是DID2。我相信我可以使用EXISTS语句。这方面的一些变化:

选择Door_Supervisors.*从存在的Door_Supervisors中选择 *从常规日志中,注释如“%DID:”+右“000000”+门监管者。DID,6+'%

试试这个:

SELECT Ds.* 
FROM Door_Supervisors ds
JOIN General_log gl on CAST(substring(Notes,6,9) as Int)=ds.did
SQLFiddle:

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

您可以使用此-

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)

因为你的要求不完全清楚,我对你想要什么做了一些假设

您希望从两个表返回值。 在注释中有6个数字123456的模式,您要将其连接到相应的门主管。 -


您现有的代码有什么问题?在比较中,您可能需要将front int转换为varchar。我不知道如何将Door Supervisor与General_Log连接起来,因为没有通用ID。您需要澄清您希望输出的外观。考虑包括更多的样本数据to.谢谢。我已经更新了我的问题。我没有说明General_Log.Notes的内容是自由文本,即它可以包含任何信息,但始终包含did:000001(门主管1),000002(门主管2),000100(门主管100)等。这适用于任何文本。文本和门主管之间的分隔符应该是:。我已经在问题中添加了更多信息。在notes自由文本中可以引用多个门主管。您有定义多个门主管的固定格式吗?谢谢。我已经更新了我的问题。我没有说明General_Log.Notes的内容是自由文本,即它可以包含任何信息,但始终包含did:000001(适用于door supervisor 1),000002(适用于door supervisor 2),000100(适用于door supervisor 100)等。您的示例中出现了两次did:???这是否意味着您可以从一个便笺字段中获得两条记录?谢谢。我已经更新了我的问题。我没有说明General_Log.Notes的内容是自由文本,即它可以包含任何信息,但始终包含did:000001(门主管1),000002(门主管2),000100(门主管100)等
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]%'