यहां एक "बेहतर" फ़ंक्शन दिया गया है, जो रेगुलर एक्सप्रेशन के कारण केवल वांछित वर्णों को फ़िल्टर करने की अनुमति देता है।
- फ़ंक्शन
initials
वास्तविक कार्य करता है, आपको रेगुलर एक्सप्रेशन निर्दिष्ट करना होगा - फ़ंक्शन
acronym
केवल अल्फा-न्यूमेरिक वर्णों को रखते हुए काम करता है
(upper
का प्रयोग करें , lower
या ucase
यदि आवश्यक हो तो आउटपुट पर कार्य करता है)।
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 ;
उदाहरण1:
select acronym('Come Again? That Cant Help!');
आउटपुट:
उदाहरण2:
select initials('Come Again? That Cant Help!', '[aeiou]');
आउटपुट: