You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BigQuery中UPPER函数保留特殊字符转大写的实现方法

保留特殊字符的大写转换方案

默认的UPPER()(或对应语言的toUpperCase()/upper())函数会遵循Unicode标准的大小写等价规则,导致部分特殊字符被转换(比如ß转为SS)。要实现转大写同时保留特殊字符,核心是只对普通小写字母进行转换,其他字符原样保留,以下是几种常用场景的实现方式:

MySQL 实现

自定义函数方案

创建一个自定义函数,遍历字符串仅转换ASCII小写字母:

DELIMITER //
CREATE FUNCTION UPPER_PRESERVE_SPECIAL(str VARCHAR(255)) RETURNS VARCHAR(255)
DETERMINISTIC
BEGIN
    DECLARE i INT DEFAULT 1;
    DECLARE len INT DEFAULT LENGTH(str);
    DECLARE res VARCHAR(255) DEFAULT '';
    DECLARE c CHAR(1);
    WHILE i <= len DO
        SET c = SUBSTRING(str, i, 1);
        IF c REGEXP '[a-z]' THEN
            SET res = CONCAT(res, UPPER(c));
        ELSE
            SET res = CONCAT(res, c);
        END IF;
        SET i = i + 1;
    END WHILE;
    RETURN res;
END //
DELIMITER ;

调用示例:

SELECT UPPER_PRESERVE_SPECIAL('Straße KAISTRAßE HØJBRO plads');
-- 输出:STRAßE KAISTRAßE HØJBRO PLADS

Python 实现

遍历字符方案

def upper_preserve_special(s):
    result = []
    for char in s:
        if 'a' <= char <= 'z':
            result.append(char.upper())
        else:
            result.append(char)
    return ''.join(result)

# 测试
print(upper_preserve_special('GothaER Straße HØJBRO plads QUAI À LA Chaux'))
# 输出:GOTHAER STRAßE HØJBRO PLADS QUAI À LA CHAUX

正则替换方案

import re

def upper_preserve_special(s):
    return re.sub(r'[a-z]', lambda match: match.group().upper(), s)

JavaScript 实现

function upperPreserveSpecial(str) {
    let result = '';
    for (const char of str) {
        if (char >= 'a' && char <= 'z') {
            result += char.toUpperCase();
        } else {
            result += char;
        }
    }
    return result;
}

// 测试
console.log(upperPreserveSpecial('Straße QUAI À LA Chaux'));
// 输出:STRAßE QUAI À LA CHAUX

说明

上述方案的核心逻辑是仅对a-z范围内的ASCII小写字母执行转大写操作,其余字符(包括带重音的字母、特殊符号如ß、Ø、À等)直接保留原样,避免了Unicode标准转换带来的特殊字符替换问题。

内容的提问来源于stack exchange,提问作者Prashant Joshi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 10:05:15