样本表
10
是否可以查询存在重复字符串值的所有记录?例如,我怎么能查询拉记录4的字符串" red"出现了两次?除了我正在处理的表格外,还有更多的字符串值可以填充在" filters_applied"柱。
澄清我正在使用Periscope并使用SQL提取数据。
答案 0 :(得分:0)
我假设您必须在逻辑页面中检查它。 您可以使用类似'%red%'。
查询表格从表格中选择Filters_Applied,其中Filters_Applied类似于'%red%';
您将获得至少有一个红色的数据。然后,在逻辑页面中进行一些字符串分析。
在php中,您可以使用substr_count函数来确定字符串的出现次数。
//the loop to load db query
while(){
$number= substr_count("Filters_Applied",red);
if($number>1){
echo "this".$Filters_Applied.">1"
}
}
答案 1 :(得分:0)
用于SQL-SERVER
或其他可以运行这些功能的版本
应用此逻辑
declare @val varchar(100) = 'yellow,blue,white,green'
DECLARE @find varchar(100) = 'green'
select @val = replace(@val,' ','') -- remove spaces
select @val;
select (len(@val)-len(replace(@val,@find,'')))/len(@find) [recurrence]
答案 2 :(得分:0)
创建此函数,它将字符串解析为行并编写查询,如下所示。这适用于SQL Server。
CREATE FUNCTION [dbo].[StrParse]
(@delimiter CHAR(1),
@csv NTEXT)
RETURNS @tbl TABLE(Keys NVARCHAR(255))
AS
BEGIN
DECLARE @len INT
SET @len = Datalength(@csv)
IF NOT @len > 0
RETURN
DECLARE @l INT
DECLARE @m INT
SET @l = 0
SET @m = 0
DECLARE @s VARCHAR(255)
DECLARE @slen INT
WHILE @l <= @len
BEGIN
SET @l = @m + 1--current position
SET @m = Charindex(@delimiter,Substring(@csv,@l + 1,255))--next delimiter or 0
IF @m <> 0
SET @m = @m + @l
--insert @tbl(keys) values(@m)
SELECT @slen = CASE
WHEN @m = 0 THEN 255 --returns the remainder of the string
ELSE @m - @l
END --returns number of characters up to next delimiter
IF @slen > 0
BEGIN
SET @s = Substring(@csv,@l,@slen)
INSERT INTO @tbl
(Keys)
SELECT @s
END
SELECT @l = CASE
WHEN @m = 0 THEN @len + 1 --breaks the loop
ELSE @m + 1
END --sets current position to 1 after next delimiter
END
RETURN
END
GO
CREATE TABLE Table1# (RecordNumber int, [Filter] varchar(5), Filters_Applied varchar(100))
GO
INSERT INTO Table1# VALUES
(1,'yes','red, blue')
,(2,'yes','green')
,(3,'no ','')
,(4,'yes','red, red, blue')
GO
--This query will return what you are expecting
SELECT t.RecordNumber,[Filter],Filters_Applied,ltrim(rtrim(keys)), count(*)NumberOfRows
FROM Table1# t
CROSS APPLY dbo.StrParse (',', t.Filters_Applied)
GROUP BY t.RecordNumber,[Filter],Filters_Applied,ltrim(rtrim(keys)) HAVING count(*) >1
答案 3 :(得分:0)
您没有说明您的DBMS,但在Postgres中,这并不复杂:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<div onclick="swipeDislike()">
click here
</div>
<div id="content">
<div id="photo">
DIV content photo
</div>
</div>
在线示例:http://rextester.com/TJUGJ44586
除select st.*
from sample_table st
join lateral (
select count(*) <> count(distinct trim(item)) as has_duplicates
from unnest(string_to_array(filters_applied,',')) as t(item)
) x on true
where x.has_duplicates;
外,上述内容实际上是标准SQL