Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 查找数据库中不存在的字符串中的名称_Sql_String - Fatal编程技术网

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。表的一行中有一个名称。