Sql 查找数据库中不存在的字符串中的名称
我有两张名单:Sql 查找数据库中不存在的字符串中的名称,sql,string,Sql,String,我有两张名单: 1) In table 'Names' Carl Tom Dan Thomas Beneth 2) In variable @string Tom Thomas Ben John Peter Tables: Names Columns: NameId Name 第一个列表在我的数据库中,但第二个列表在字符串中。我正在寻找一个查询,它可以从@string中为我提供名称,而这些名称不在表名中。在这个例子中,这应该是
1) In table 'Names'
Carl
Tom
Dan
Thomas
Beneth
2) In variable @string
Tom
Thomas
Ben
John
Peter
Tables:
Names
Columns:
NameId
Name
第一个列表在我的数据库中,但第二个列表在字符串中。我正在寻找一个查询,它可以从@string中为我提供名称,而这些名称不在表名中。在这个例子中,这应该是:卡尔,丹,贝尼思。我不知道怎么做。如果可能的话-没有什么过程是好的。将的代码调整为仅执行一次,您需要执行以下操作:取出@Names表并替换为实际的表:
DECLARE @List VARCHAR(100)
SET @List = 'Tom, Thomas, Ben, John, Peter'
DECLARE @Names TABLE (Name VARCHAR(10))
INSERT INTO @Names (Name) VALUES ('Tom')
INSERT INTO @Names (Name) VALUES ('Thomas')
SELECT [Value]
FROM
(
SELECT
[Value] = LTRIM(RTRIM(SUBSTRING(@List, [Number],CHARINDEX(',', @List + ',', [Number]) - [Number])))
FROM
(
SELECT Number = ROW_NUMBER() OVER (ORDER BY name)
FROM sys.all_objects
) AS x
WHERE
Number <= LEN(@List) AND
SUBSTRING(',' + @List, [Number], LEN(',')) = ','
) y
LEFT JOIN
@Names n ON
y.Value = n.Name
WHERE n.Name IS NULL
这是Oracle的SQL版本,但您应该能够将其适应于其他系统
select names.name from (
select 1 as NameId, 'Carl' as Name from dual
union
select 2, 'Tom' from dual
union
select 3, 'Dan' from dual
union
select 4, 'Thomas' from dual
union
select 5, 'Beneth' from dual) names
, (select 'Tom Thomas Ben John Peter' as list from dual) string
where length(replace(list, name, '')) = length(string.list)
这个变量是字符串吗?在表中,每行的名称是吗?使用:从字符串拆分返回一个表,并使用NOT INThx查询以获取帮助。从中得出答案。我知道这件事太复杂了,如果没有这个过程就做不到。像@Jithin Shaji-typeof variable@string这样的东西就是nvarcharMAX。表的一行中有一个名称。