SQL - Procediiento Cuenta letras

 
Vista:

Procediiento Cuenta letras

Publicado por Junior (1 intervención) el 07/06/2020 12:54:52
Tengo un procedimiento que me cuenta las letras, ahora necesito que me distinga entre mayusculkas y minusculas, la cuestion es que no se si meterlo en otro while, cosa que creo que no aria falta pero no consigo dar con la solucion, completa. este es el procedimiento sin distincion de mayusculas;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
DROP PROCEDURE IF EXISTS P08_NUMERO_VECES_CARACTERv2;
 
DELIMITER |
 
CREATE PROCEDURE P08_NUMERO_VECES_CARACTERv2(IN cadena VARCHAR(255), IN caracter CHAR(1),
                                             OUT numero INT, OUT resultado TEXT)
 
BEGIN
 
     DECLARE posicion INT DEFAULT 1;
     DECLARE longitud INT DEFAULT 0;
     DECLARE letra CHAR(1) DEFAULT '';
     DECLARE numascii INTEGER DEFAULT 0;
     DECLARE mayusculas INT DEFAULT 0;
 
     SET numero = 0;
     SET resultado = 'La cadena de texto --> ';
     SET longitud = CHARACTER_LENGTH(cadena);
     SET resultado = CONCAT(resultado,cadena,' tiene: ',longitud,' caracteres\n');
     SET resultado = CONCAT(resultado,'\n El caracter --> ',caracter,':');
 
     WHILE posicion < longitud + 1 DO
          SET letra = SUBSTRING(cadena,posicion,1);
          IF letra LIKE caracter THEN
               SET numero = numero + 1;
               SET resultado = CONCAT(resultado,'\n - Aparece en la posición ',posición);
          END IF;
          SET posicion = posicion + 1;
     END WHILE;
          IF numero = 0 THEN
               SET resultado = CONCAT(resultado,'\n\n NO se encuentra en la cadena de texto');
          ELSE
               SET resultado = CONCAT(resultado,'\n\n Por tanto, aparece ',numero,' vez/veces en el texto: ', cadena);
          END IF;
 
END |
 
DELIMITER ;

Esta parte es para que me distinga entre mayúsculas
1
2
3
4
5
6
7
8
9
WHILE posicion < (longitud + 1) DO
             SET caracter = SUBSTRING(cadena,posicion,1);
               SET numascii = ASCII(caracter);
             IF numascii > 64 AND numascii < 91 THEN
                    SET numero = numero + 1;
                    SET resultado = CONCAT(resultado,'\n - Aparece en la posición ',posición);
             END IF;
             SET posicion = posicion + 1;
      END WHILE;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder