Считайте заглавные буквы в строке - PullRequest
1 голос
/ 14 апреля 2011

Как подсчитать заглавные буквы с помощью 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

Полагаю, мне запрещено использовать списки ПРОТИВпункты, которые отстой

Итак, есть ли способ достичь этого?

Ответы [ 5 ]

2 голосов
/ 14 апреля 2011

Попробуйте эту функцию -

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
1 голос
/ 18 декабря 2012

Если ваша таблица имеет один столбец (имя столбца) и имеет следующие значения:

  • Аааааа
  • аааааа
  • AAAAAA

Вы возвращаете счет капитала для каждого значения, используя следующий запрос:

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
0 голосов
/ 14 апреля 2011

Просто мысль - вы пытаетесь с помощью оператора 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))
0 голосов
/ 14 апреля 2011

У меня есть идея, но она очень грязная ..

Вы можете удалить заглавные буквы из post_text и затем сравнить их длину с оригинальной post_text длиной:

COUNT(post_text) - COUNT( REPLACE(REPLACE(REPLACE(REPLACE(post_text, 'D', ''), 'C', ''), 'B', ''), 'A', '') )

Я не знаю, хотите ли вы использовать это, и я не хочу убеждать вас в этом, но это одна из возможностей.

0 голосов
/ 14 апреля 2011

Вам не хватает первого 'перед символом A и одного после Z.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...