如何在MySQL中实现initcap功能?

xxb16uws  于 2023-03-07  发布在  Mysql
关注(0)|答案(5)|浏览(218)

我需要initcap的区域名称的功能。有没有办法在MySQL中实现这一点?

  • 非洲
  • 印度次大陆
  • 美国西海岸
  • 欧洲/英国

这样的结果会是怎样呢?

dgiusagp

dgiusagp1#

以前我在MySQL中寻找一个内置的initcap/ucfirst函数,但不幸的是找不到这样的字符串函数,所以决定自己写一个......感谢MySQL社区成员纠正了我函数中的bug并将其发布回来。

DELIMITER $$

DROP FUNCTION IF EXISTS `test`.`initcap`$$

CREATE FUNCTION `initcap`(x char(30)) RETURNS char(30) CHARSET utf8
READS SQL DATA
DETERMINISTIC
BEGIN
SET @str='';
SET @l_str='';
WHILE x REGEXP ' ' DO
SELECT SUBSTRING_INDEX(x, ' ', 1) INTO @l_str;
SELECT SUBSTRING(x, LOCATE(' ', x)+1) INTO x;
SELECT CONCAT(@str, ' ', CONCAT(UPPER(SUBSTRING(@l_str,1,1)),LOWER(SUBSTRING(@l_str,2)))) INTO @str;
END WHILE;
RETURN LTRIM(CONCAT(@str, ' ', CONCAT(UPPER(SUBSTRING(x,1,1)),LOWER(SUBSTRING(x,2)))));
END$$

DELIMITER ;

Usage: 

select initcap('This is test string');
yruzcnhs

yruzcnhs2#

DELIMITER $$

CREATE
   FUNCTION `test`.`initcap`(input VARCHAR(255))
   RETURNS VARCHAR(255) 
BEGIN
DECLARE len INT;
DECLARE i INT;

SET len   = CHAR_LENGTH(input);
SET input = LOWER(input);
SET i = 0;

WHILE (i < len) DO
    IF (MID(input,i,1) = ' ' OR i = 0) THEN
        IF (i < len) THEN
            SET input = CONCAT(
                LEFT(input,i),
                UPPER(MID(input,i + 1,1)),
                RIGHT(input,len - i - 1)
            );
        END IF;
    END IF;
    SET i = i + 1;
END WHILE;

RETURN input;
END$$

DELIMITER ;

用法:initcap("hello world")输出:Hello World
用法:initcap("HELLO WORLD")输出:Hello World
这会将字符串中每个单词的首字母转换为大写。

xesrikrc

xesrikrc3#

DELIMITER $$

DROP FUNCTION IF EXISTS `test`.`initcap`$$

CREATE FUNCTION `initcap`(x char(30)) RETURNS char(30) CHARSET utf8
BEGIN
SET @str='';
SET @l_str='';
WHILE x REGEXP ' ' DO
SELECT SUBSTRING_INDEX(x, ' ', 1) INTO @l_str;
SELECT SUBSTRING(x, LOCATE(' ', x)+1) INTO x;
SELECT CONCAT(@str, ' ', CONCAT(UPPER(SUBSTRING(@l_str,1,1)),LOWER(SUBSTRING(@l_str,2)))) INTO @str;
END WHILE;
RETURN LTRIM(CONCAT(@str, ' ', CONCAT(UPPER(SUBSTRING(x,1,1)),LOWER(SUBSTRING(x,2)))));
END$$

DELIMITER ;
mftmpeh8

mftmpeh84#

CREATE FUNCTION `upperfirst`(x varchar(255)) RETURNS varchar(255) CHARSET latin1

RETURN concat( upper(substring(x,1,1)),lower(substring(x,2)) );
h7appiyu

h7appiyu5#

由于MySQL不提供直接的INITCAP函数,但您可以通过以下方式在mysql中实现initcap功能:
SELECT CONCAT(SUBSTRING(列名称,1,1),LOWER(SUBSTRING(列名称,2)))根据所需名称FROM表格名称;

相关问题