【发布时间】:2021-01-16 20:11:59
【问题描述】:
我有一个场景,我需要找到其中只有 start 和 END 的 ID。下表供参考。
Declare @T Table ( ID int, Name varchar(100))
Insert into @T values (1,'Start')
Insert into @T values (1,'END')
Insert into @T values (1,'Stuart')
Insert into @T values (1,'robin')
Insert into @T values (2,'Start')
Insert into @T values (2,'END')
Insert into @T values (3,'Start')
Insert into @T values (4,'END')
我希望输出为:
ID 名称
2 开始
2 结束
我想要那些只有开始和结束的ID。
到目前为止我尝试了什么:
SELECT * FROM @T t
WHERE EXISTS (SELECT * FROM @T WHERE id = t.id AND name = 'start')
AND EXISTS (SELECT * FROM @T WHERE id = t.id AND name = 'END')
但我的查询也给出了 ID 1。
谁能帮我解决这个问题。
【问题讨论】:
-
你的 sql server 不区分大小写吗?因为默认情况下它是。您可以要求管理员将其关闭并重试。或者你可以使用
dbo.InitCap()函数来匹配Start。 -
不区分大小写
-
在这种情况下,您可以使用
COLLATE使其工作。请在答案中使用 sql 并告诉我。 -
@KoushikRoy 与否。当然不。这不是排序规则问题,而是一个古怪的查询。打破整个数据库的工作方式不是解决方案。更改数据库的排序规则也不会更改现有的列排序规则。强制排序会阻止使用任何现有索引。此外,区分大小写的搜索将匹配
end和END而不会出现任何问题。 区分大小写搜索可以绕过记录 -
我不知道拥有一个不区分大小写的数据库是否是个好主意。但一定有人让 MS 想通了。
标签: sql sql-server sql-server-2008