[英]Count capital letters in String
如何使用MySQL查询来计算大写字母? 我现在正在尝试
COUNT(IF(MATCH(post_text) AGAINST('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'),1,NULL))
但这给我一个错误的说法:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U' at line 4
我想,我不允许在AGAINST子句中不使用列表,这很烂
那么,有没有办法实现这一目标?
试试这个功能-
DELIMITER $$
CREATE FUNCTION cnt_up_case(str VARCHAR(255))
RETURNS VARCHAR(255)
NOT DETERMINISTIC
CONTAINS SQL
BEGIN
SET @cnt = 0;
SET @len = length(str);
SET @i = 1;
WHILE @i <= @len
DO
SET @c = substring(str, @i, 1);
IF ascii(@c) > 64 AND ascii(@c) < 91 THEN
SET @cnt = @cnt + 1;
END IF;
SET @i = @i + 1;
END WHILE;
RETURN @cnt;
END
$$
DELIMITER ;
例:
SET @Param1 = 'AbCdE';
SET @ResultValue = cnt_up_case(@Param1);
SELECT @ResultValue;
--------------
3
如果您的表具有一列(列名)并且具有以下值:
通过使用以下查询,可以获取每个值的资本计数:
SELECT columnname,(length(columnname) - length( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(naam,'Z','') ,'Y','') ,'X','') ,'W','') ,'V','') ,'U','') ,'T','') ,'S','') ,'R','') ,'Q','') ,'P','') ,'O','') ,'M','') ,'M','') ,'L','') ,'K','') ,'J','') ,'I','') ,'H','') ,'G','') ,'F','') ,'E','') ,'D','') ,'C','') ,'B','') ,'A','') ) ) FROM column
您在字符A之前缺少第一个',在Z之后缺少了一个。
只是一个想法-您是否在开始时尝试使用SELECT语句?
SELECT COUNT(IF(MATCH(post_text) AGAINST('A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z'),1,NULL))
我有个主意,但是很脏。
您可以从post_text
删除大写字母,然后将其长度与原始post_text
长度进行比较:
COUNT(post_text) - COUNT( REPLACE(REPLACE(REPLACE(REPLACE(post_text, 'D', ''), 'C', ''), 'B', ''), 'A', '') )
我不知道您是否要使用它,也不想说服您,但这是一种可能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.