这是我在使用基于T-SQL 的Stack Exchange Data Explorer时遇到的一个问题:
如何搜索字符串,除非它作为其他字符串的子字符串出现?
例如,如何MyTable在列中MyCol包含字符串的表中选择所有记录foo,但忽略foo属于字符串的任何s foobar?
快速而肮脏的尝试将是这样的:
SELECT *
FROM MyTable
WHERE MyCol LIKE '%foo%'
AND MyCol NOT LIKE '%foobar%'
Run Code Online (Sandbox Code Playgroud)
但显然这将无法匹配,例如MyCol = 'not all foos are foobars',我想要匹配.
我提出的一个解决方案是foobar用一些虚拟标记(不是子字符串foo)替换所有出现的,然后检查任何剩余的foos,如:
SELECT *
FROM MyTable
WHERE REPLACE(MyCol, 'foobar', 'X') LIKE '%foo%'
Run Code Online (Sandbox Code Playgroud)
这有效,但我怀疑它效率不高,因为它必须REPLACE()在表中的每条记录上运行.(对于SEDE,这通常是Posts表,目前有大约3000万行.)有更好的方法吗?
(FWIW,提示此问题的真实用例是搜索带有使用http://方案前缀但未指向主机的图像URL的SO帖子i.stack.imgur.com.)
我不明白为什么这不起作用以及如何解决它,我尝试了各种各样的事情,比如写作
select COUNT(p.OwnerUserId)
Run Code Online (Sandbox Code Playgroud)
但这不起作用,我不明白错误消息.我不使用MS SQL(我使用SQLite和MySQL).
我如何编写此查询,以便我可以将质量控制过滤10或50?(QC> 50 AND ...)
基本上将下面的SQL插入到此URL中,运行它,您将在结果中看到1. http://data.stackexchange.com/stackoverflow/query/new
SELECT
TOP 100
p.OwnerUserId AS [User Link],
sum(ViewCount) as VC,
avg(ViewCount) as AVC,
COUNT(p.OwnerUserId ) as QC
FROM Posts p
join Users on p.OwnerUserId = Users.Id
where PostTypeId = 1 and ViewCount<10000 and CommunityOwnedDate is null
group by p.OwnerUserId
order by AVC desc
Run Code Online (Sandbox Code Playgroud) 我正在尝试在SO Data Explorer上运行此查询:
DECLARE @totalRep float
SET @totalRep = SELECT SUM(Users.Reputation) FROM Users
Run Code Online (Sandbox Code Playgroud)
而且我一直在努力
关键字'SELECT'附近的语法不正确.
我究竟做错了什么?