谁能告诉我如何在 MySQL 中计算字符串中的字母?
例如:
SELECT numberOfLetters('abc123 def')
将返回 6
通过字母,我的意思是 AZ 和 az。
numberOfLetters 当然不是有效的 SQL,但它说明了我正在尝试做的事情。
我使用的 MySQL 版本是 5.5.27
谁能告诉我如何在 MySQL 中计算字符串中的字母?
例如:
SELECT numberOfLetters('abc123 def')
将返回 6
通过字母,我的意思是 AZ 和 az。
numberOfLetters 当然不是有效的 SQL,但它说明了我正在尝试做的事情。
我使用的 MySQL 版本是 5.5.27
您将需要一个功能:
DROP FUNCTION IF EXISTS numberOfLetters;
DELIMITER //
CREATE FUNCTION numberOfLetters(s VARCHAR(255)) RETURNS INT DETERMINISTIC NO SQL
BEGIN
DECLARE c INT;
DECLARE r INT DEFAULT 0;
DECLARE n INT DEFAULT LENGTH(s);
DECLARE i INT DEFAULT 1;
WHILE i <= n DO
SET c = ASCII(SUBSTRING(s, i, 1));
IF (c >= 65 AND c <= 90) OR (c >= 97 AND c <= 122) THEN
SET r = r + 1;
END IF;
SET i = i + 1;
END WHILE;
RETURN r;
END//
DELIMITER ;
然后调用:
SELECT numberOfLetters('abc123 def');
相当离我的头,但我相信这会做你需要的。
注意:假设 ASCII 并且您只计算 az、AZ。
DROP FUNCTION IF EXISTS numberOfLetters;
DELIMITER //
CREATE FUNCTION numberOfLetters (inStr CHAR(255))
RETURNS INT
BEGIN
DECLARE strLen INT;
DECLARE letterCt INT;
DECLARE pos INT;
DECLARE curLetter CHAR(1);
SET pos := 0;
SET letterCt := 0;
SELECT LENGTH(inStr) INTO strLen;
ctLoop: LOOP
IF (strLen = 0) THEN
LEAVE ctLoop;
END IF;
SELECT SUBSTR(inStr, strLen, 1) INTO curLetter;
IF (ASCII(curLetter) >= 65 AND ASCII(curLetter) <= 90) OR (ASCII(curLetter) >= 97 AND ASCII(curLetter) <= 122) THEN
SET letterCt := letterCt + 1;
END IF;
SET strLen := strLen - 1;
END LOOP ctLoop;
RETURN letterCt;
END //
DELIMITER ;
select numberOfLetters('abc123 def');
输出:
+-------------------------------+
| numberOfLetters('abc123 def') |
+-------------------------------+
| 6 |
+-------------------------------+
您可以像这样简单地使用length()函数:
选择长度('abc123 def');
它返回: 10
我不能说这对 MySQL 有好处,但请尝试一下 -
SELECT CHAR_LENGTH(
REPLACE(
REPLACE(
REPLACE(
REPLACE('abc123 def', ' ', ''), '1', ''), '2', ''), '3', '')
);
...您应该为需要从计数中删除的每个字符添加 REPLACE 函数。