在SQL Server中,如何从指定数据以外的列中获取数据。例如,我有一个列,数据"MySQL,服务器,数据库“在一行中。
现在,我想要查看该列中是否存在除MySQL之外的其他值。
我尝试使用Not Like,但没有成功。
例如TableA:
id | Code
---+---------------------------
1 | mysql,sqlserver,database
2 | mysql
3 | sqlserver,database
4 | mysql,mysql
在这里,我想看看该列是否有"mysql“以外的数据,比如id:1有"mysql”以外的数据,但id:2有"mysql“但没有"mysql”以外的数据。最后,如果除了"mysql“之外没有任何数据,我想返回null或空白值。
到目前为止我使用的代码:
select code from tableA where code not like '%mysql%'
发布于 2019-04-02 08:09:54
如果你能提供一些数据和代码,这会很有帮助。这是可行的(就我所理解的问题而言):
CREATE TABLE #x (object_type varchar(50))
INSERT #x (object_type) VALUES ('MySQL'), ('Server'), ('Database')
SELECT * FROM #x WHERE object_type <> 'MySQL'
根据最新的问题,我认为你在寻找:
CREATE TABLE #x (id int identity(1, 1), code varchar(50))
INSERT #x (code) VALUES ('mysql,sqlserver,database'), ('mysql'), ('sqlserver,database'), ('mysql,mysql')
SELECT *
FROM #x
WHERE id IN (
SELECT id
FROM #x
CROSS APPLY string_split(code, ',')
WHERE value <> 'mysql'
)
然而,正如@Eric Brandt上面所问的,不清楚您是否希望选择行id = 4。
发布于 2019-04-02 13:27:05
注意:STRING_SPLIT
仅适用于SQL Server 2016
或更高版本。如果您使用的是较早版本,请进行搜索,有许多类似的实现
declare @table table
(
id int identity,
Code varchar(30)
)
insert into @table select 'mysql,sqlserver,database'
insert into @table select 'mysql'
insert into @table select 'sqlserver,database'
insert into @table select 'mysql,mysql'
insert into @table select ''
insert into @table select NULL
select *
from @table t
where t.Code is null
or exists
(
select *
from string_split(t.Code, ',')
where value <> 'mysql'
)
/* RESULT
1 mysql,sqlserver,database
3 sqlserver,database
5
6 NULL
*/
https://stackoverflow.com/questions/55465111
复制相似问题