sql >> Database teknologi >  >> RDS >> Mysql

Mysql udtræk det første bogstav i hvert ord i en bestemt kolonne

Her er en "forbedret" funktion, der tillader kun at filtrere ønskede tegn takket være et regulært udtryk.

  • funktion initials udfører det faktiske job, skal du angive det regulære udtryk
  • funktion acronym udfører arbejdet kun ved at beholde alfanumeriske tegn

(Brug upper , lower eller ucase funktioner på udgangen, hvis det er nødvendigt).

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 ;

Eksempel 1:

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

Udgange:

Eksempel 2:

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

Udgange:



  1. MySql C++ connector getString() virker ikke korrekt, mens getInt fungerer perfekt

  2. Kan jeg løse dette med ren mysql? (sammenføjning på '' adskilte værdier i en kolonne)

  3. Sådan får du det aktuelle Auto_Increment-sekvensnummer til MySQL / MariaDB-tabel

  4. Indsæt filindhold i MySQL-tabellens kolonne