我有这样一张桌子:
TITLE | DESCRIPTION
------------------------------------------------
test1 | value blah blah value
test2 | value test
test3 | test test test
test4 | valuevaluevaluevaluevalue
Run Code Online (Sandbox Code Playgroud)
我试图弄清楚如何返回每个描述中字符串出现的次数.
所以,如果我想计算'value'出现的次数,sql语句将返回:
TITLE | DESCRIPTION | COUNT
------------------------------------------------------------
test1 | value blah blah value | 2
test2 | value test | 1
test3 | test test test | 0
test4 | valuevaluevaluevaluevalue | 5
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?我根本不想使用php,只是mysql.
yan*_*nis 312
这应该做的伎俩:
SELECT
title,
description,
ROUND (
(
LENGTH(description)
- LENGTH( REPLACE ( description, "value", "") )
) / LENGTH("value")
) AS count
FROM <table>
Run Code Online (Sandbox Code Playgroud)
Joe*_*eph 18
试试这个:
select TITLE,
(length(DESCRIPTION )-length(replace(DESCRIPTION ,'value','')))/5 as COUNT
FROM <table>
Run Code Online (Sandbox Code Playgroud)
gab*_*sch 14
@yannis解决方案的更简单,更有效的变化:
SELECT
title,
description,
CHAR_LENGTH(description) - CHAR_LENGTH( REPLACE ( description, 'value', '1234') )
AS `count`
FROM <table>
Run Code Online (Sandbox Code Playgroud)
不同之处在于我将"value"字符串替换为1-char较短的字符串(在本例中为"1234").这样您就不需要进行除法和舍入来获得整数值.
通用版本(适用于每个针头串):
SET @needle = 'value';
SELECT
description,
CHAR_LENGTH(description) - CHAR_LENGTH(REPLACE(description, @needle, SPACE(LENGTH(@needle)-1)))
AS `count`
FROM <table>
Run Code Online (Sandbox Code Playgroud)
Nil*_*was 12
在SQL SERVER中,这就是答案
Declare @t table(TITLE VARCHAR(100), DESCRIPTION VARCHAR(100))
INSERT INTO @t SELECT 'test1', 'value blah blah value'
INSERT INTO @t SELECT 'test2','value test'
INSERT INTO @t SELECT 'test3','test test test'
INSERT INTO @t SELECT 'test4','valuevaluevaluevaluevalue'
SELECT TITLE,DESCRIPTION,Count = (LEN(DESCRIPTION) - LEN(REPLACE(DESCRIPTION, 'value', '')))/LEN('value')
FROM @t
Run Code Online (Sandbox Code Playgroud)
结果
TITLE DESCRIPTION Count
test1 value blah blah value 2
test2 value test 1
test3 test test test 0
test4 valuevaluevaluevaluevalue 5
Run Code Online (Sandbox Code Playgroud)
我没有安装MySQL,但是当REPLACE相同时,可以发现LEN的等效值是LENGTH.
所以MySql中的等价查询应该是
SELECT TITLE,DESCRIPTION, (LENGTH(DESCRIPTION) - LENGTH(REPLACE(DESCRIPTION, 'value', '')))/LENGTH('value') AS Count
FROM <yourTable>
Run Code Online (Sandbox Code Playgroud)
如果它在MySql中也适用,请告诉我.
这是一个可以做到这一点的函数。
CREATE FUNCTION count_str(haystack TEXT, needle VARCHAR(32))
RETURNS INTEGER DETERMINISTIC
BEGIN
RETURN ROUND((CHAR_LENGTH(haystack) - CHAR_LENGTH(REPLACE(haystack, needle, ""))) / CHAR_LENGTH(needle));
END;
Run Code Online (Sandbox Code Playgroud)