sql >> Database >  >> RDS >> Mysql

Mysql extraheert de eerste letter van elk woord in een specifieke kolom

Hier is een "verbeterde" functie, die het mogelijk maakt om alleen gewenste karakters te filteren dankzij een reguliere expressie.

  • functie initials doet het eigenlijke werk, je moet de reguliere expressie specificeren
  • functie acronym doet het werk alleen alfanumerieke tekens behouden

(Gebruik upper , lower of ucase functies op de uitgang indien nodig).

delimiter $$
drop function if exists `initials`$$
CREATE FUNCTION `initials`(str text, expr text) RETURNS text CHARSET utf8
begin
    declare result text default '';
    declare buffer text default '';
    declare i int default 1;
    if(str is null) then
        return null;
    end if;
    set buffer = trim(str);
    while i <= length(buffer) do
        if substr(buffer, i, 1) regexp expr then
            set result = concat( result, substr( buffer, i, 1 ));
            set i = i + 1;
            while i <= length( buffer ) and substr(buffer, i, 1) regexp expr do
                set i = i + 1;
            end while;
            while i <= length( buffer ) and substr(buffer, i, 1) not regexp expr do
                set i = i + 1;
            end while;
        else
            set i = i + 1;
        end if;
    end while;
    return result;
end$$

drop function if exists `acronym`$$
CREATE FUNCTION `acronym`(str text) RETURNS text CHARSET utf8
begin
    declare result text default '';
    set result = initials( str, '[[:alnum:]]' );
    return result;
end$$
delimiter ;

Voorbeeld1:

select acronym('Come Again? That Cant Help!');

Uitgangen:

Voorbeeld2:

select initials('Come Again? That Cant Help!', '[aeiou]');

Uitgangen:



  1. Hoe op te lossen Het probleem met de authenticatie-plug-in 'caching_sha2_password' kan niet worden geladen

  2. hoe LIKE te gebruiken met kolomnaam

  3. Een tabel maken in de modus voor één gebruiker in postgre

  4. Cumulatieve som over een reeks rijen in mysql