TDengine 字符串函数 LOWER 用户手册
其中,TDengine TSDB 是一款高性能、分布式的时序数据库(Time Series Database),同时它还带有内建的缓存、流式计算、数据订阅等系统功能;TDengine IDMP 是一款AI原生工业数据管理平台,它通过树状层次结构建立数据目录,对数据进行标准化、情景化,并通过 AI 提供实时分析、可视化、事件管理与报警等功能。: 统一设备位置信息的大小写格式,便于数据查询和统计。:

LOWER 函数使用手册
函数定义
LOWER(expr)
功能说明
一句话描述: 将字符串中的所有大写字母转换为小写字母。
将输入字符串 expr 中的所有大写字母字符转换为对应的小写形式,非字母字符保持不变。
参数说明
| 参数 | 说明 | 类型 | 必填 |
|---|---|---|---|
expr |
待转换的字符串 | VARCHAR、NCHAR | 是 |
返回值
- 类型: 与输入参数类型一致(VARCHAR 或 NCHAR)
- 长度: 与输入字符串长度相同
- NULL 处理: 如果输入为 NULL,返回 NULL
适用范围
- 数据类型: VARCHAR、NCHAR
- 适用于: 表和超级表
- 子查询: 支持内层和外层查询
基础示例
-- 基本用法
taos> SELECT LOWER('TDengine');
lower('TDengine') |
====================
tdengine |
-- 包含数字和特殊字符
taos> SELECT LOWER('Device-2024_ABC');
lower('Device-2024_ABC') |
===========================
device-2024_abc |
-- 中英文混合
taos> SELECT LOWER('Beijing北京2024');
lower('Beijing北京2024') |
==========================
beijing北京2024 |
-- NULL 值处理
taos> SELECT LOWER(NULL);
lower(NULL) |
==============
NULL |
使用场景示例
场景 1: 设备位置信息标准化
业务需求: 统一设备位置信息的大小写格式,便于数据查询和统计
-- 创建智能电表超级表
CREATE STABLE test.meters (
`ts` TIMESTAMP,
`current` FLOAT,
`voltage` INT,
`phase` FLOAT
) TAGS (
`groupid` INT,
`location` VARCHAR(100)
);
-- 插入测试数据(位置信息大小写不统一)
INSERT INTO test.d001 USING test.meters TAGS(1, 'Beijing-Chaoyang-Building-A')
VALUES ('2024-01-15 08:00:00', 10.5, 220, 0.85);
INSERT INTO test.d002 USING test.meters TAGS(2, 'SHANGHAI-Pudong-Tower-B')
VALUES ('2024-01-15 08:00:00', 12.3, 221, 0.88);
INSERT INTO test.d003 USING test.meters TAGS(3, 'guangzhou-TIANHE-Plaza-C')
VALUES ('2024-01-15 08:00:00', 9.8, 219, 0.82);
-- 标准化位置信息为小写
SELECT
tbname,
location AS original_location,
LOWER(location) AS standardized_location,
voltage,
current
FROM test.meters;
输出示例:
tbname | original_location | standardized_location | voltage | current
-------|-----------------------------|-----------------------------|---------|--------
d001 | Beijing-Chaoyang-Building-A | beijing-chaoyang-building-a | 220 | 10.5
d002 | SHANGHAI-Pudong-Tower-B | shanghai-pudong-tower-b | 221 | 12.3
d003 | guangzhou-TIANHE-Plaza-C | guangzhou-tianhe-plaza-c | 219 | 9.8
目的: 统一数据格式,消除大小写差异导致的查询问题
场景 2: 不区分大小写的位置查询
业务需求: 查询特定城市的设备,忽略用户输入的大小写
-- 不区分大小写查询北京地区的设备
SELECT
tbname,
location,
voltage,
current
FROM test.meters
WHERE LOWER(location) LIKE '%beijing%'
ORDER BY current DESC;
输出示例:
tbname | location | voltage | current
-------|------------------------------|---------|--------
d001 | Beijing-Chaoyang-Building-A | 220 | 10.5
d004 | BEIJING-Haidian-Park-D | 222 | 11.2
目的: 提升用户体验,避免因大小写不匹配导致的查询遗漏
场景 3: 区域统计(忽略大小写差异)
业务需求: 按城市统计设备数量和平均电压,消除大小写导致的重复分组
-- 插入更多测试数据
INSERT INTO test.d004 USING test.meters TAGS(4, 'BEIJING-Haidian-Park-D')
VALUES ('2024-01-15 08:00:00', 11.2, 222, 0.90);
INSERT INTO test.d005 USING test.meters TAGS(5, 'beijing-Dongcheng-Mall-E')
VALUES ('2024-01-15 08:00:00', 10.8, 220, 0.87);
-- 按城市统计(标准化大小写)
SELECT
LOWER(SUBSTRING(location, 1, POSITION('-' IN location) - 1)) AS city,
COUNT(*) AS device_count,
ROUND(AVG(voltage), 2) AS avg_voltage,
ROUND(AVG(current), 2) AS avg_current
FROM test.meters
GROUP BY city
ORDER BY device_count DESC;
输出示例:
city | device_count | avg_voltage | avg_current
----------|--------------|-------------|-------------
beijing | 3 | 220.67 | 10.83
shanghai | 1 | 221.00 | 12.30
guangzhou | 1 | 219.00 | 9.80
目的: 正确聚合统计数据,避免因大小写差异产生错误的分组
场景 4: 数据清洗和验证
业务需求: 检查位置信息的数据质量,识别不符合命名规范的记录
-- 检查位置信息是否全部为小写(标准格式)
SELECT
tbname,
location,
CASE
WHEN location = LOWER(location) THEN '符合规范'
ELSE '需要修正'
END AS format_check,
LENGTH(location) - LENGTH(LOWER(location)) AS uppercase_count
FROM test.meters
WHERE location != LOWER(location);
输出示例:
tbname | location | format_check | uppercase_count
-------|-----------------------------|--------------|-----------------
d002 | SHANGHAI-Pudong-Tower-B | 需要修正 | 9
d003 | guangzhou-TIANHE-Plaza-C | 需要修正 | 6
d004 | BEIJING-Haidian-Park-D | 需要修正 | 7
目的: 数据质量监控,发现需要规范化的数据
场景 5: 设备型号标准化
业务需求: 标准化设备型号信息,便于统一管理
-- 假设增加设备型号标签
ALTER STABLE test.meters ADD TAG model VARCHAR(50);
-- 插入带型号的数据
INSERT INTO test.d006 USING test.meters TAGS(6, 'shenzhen-nanshan-center-f', 'Model-ABC-2024')
VALUES ('2024-01-15 08:00:00', 10.5, 220, 0.85);
INSERT INTO test.d007 USING test.meters TAGS(7, 'shenzhen-nanshan-center-g', 'MODEL-abc-2024')
VALUES ('2024-01-15 08:00:00', 10.3, 219, 0.84);
-- 标准化型号并统计
SELECT
LOWER(model) AS standard_model,
COUNT(*) AS device_count,
ROUND(AVG(voltage), 2) AS avg_voltage
FROM test.meters
WHERE model IS NOT NULL
GROUP BY standard_model;
输出示例:
standard_model | device_count | avg_voltage
----------------|--------------|-------------
model-abc-2024 | 2 | 219.50
目的: 统一设备型号格式,避免因大小写不同导致的重复统计
场景 6: 结合 UPPER 函数的数据对比
业务需求: 比对原始数据与标准化数据的差异
-- 查看原始位置与标准化后的对比
SELECT
tbname,
location AS original,
UPPER(location) AS all_upper,
LOWER(location) AS all_lower,
CASE
WHEN location = UPPER(location) THEN '全大写'
WHEN location = LOWER(location) THEN '全小写'
ELSE '大小写混合'
END AS case_type
FROM test.meters
LIMIT 5;
输出示例:
tbname | original | all_upper | all_lower | case_type
-------|------------------------------|------------------------------|------------------------------|------------
d001 | Beijing-Chaoyang-Building-A | BEIJING-CHAOYANG-BUILDING-A | beijing-chaoyang-building-a | 大小写混合
d002 | SHANGHAI-Pudong-Tower-B | SHANGHAI-PUDONG-TOWER-B | shanghai-pudong-tower-b | 全大写
d003 | guangzhou-TIANHE-Plaza-C | GUANGZHOU-TIANHE-PLAZA-C | guangzhou-tianhe-plaza-c | 大小写混合
目的: 可视化数据格式差异,辅助数据清洗决策
与 UPPER 函数的对比
| 函数 | 功能 | 示例输入 | 示例输出 |
|---|---|---|---|
| LOWER | 转小写 | 'TDengine-2024' |
'tdengine-2024' |
| UPPER | 转大写 | 'TDengine-2024' |
'TDENGINE-2024' |
实际应用优势
1. 提升查询准确性
-- 不使用 LOWER (可能遗漏数据)
SELECT * FROM test.meters WHERE location LIKE '%beijing%'; -- 可能查不到 'Beijing' 或 'BEIJING'
-- 使用 LOWER (不会遗漏)
SELECT * FROM test.meters WHERE LOWER(location) LIKE '%beijing%'; -- 查到所有包含 beijing 的记录
2. 简化数据导入
-- 导入时自动标准化
INSERT INTO test.meters (ts, location, ...)
SELECT ts, LOWER(location), ...
FROM staging_table;
3. 数据去重
-- 基于标准化后的位置去重
SELECT DISTINCT LOWER(location) AS unique_locations
FROM test.meters;
性能考虑
- 索引影响: 在 WHERE 子句中使用
LOWER()可能无法使用索引 - 优化建议:
- 对于频繁查询的字段,考虑在插入时就标准化
- 或创建计算列存储标准化后的值
- 大数据量: 对超大数据集使用时,注意查询性能
注意事项
- 字符集支持: 支持 ASCII 和 UTF-8 字符
- 多字节字符: 中文等多字节字符保持不变
- NULL 处理: 输入 NULL 返回 NULL
- 不可变性: 不会修改原始数据,仅返回转换结果
- 区域设置: 某些特殊字符的大小写转换可能受区域设置影响
相关函数
UPPER(): 转换为大写LTRIM(): 去除左侧空格RTRIM(): 去除右侧空格TRIM(): 去除两侧空格LENGTH(): 获取字符串长度CHAR_LENGTH(): 获取字符数
完整示例:设备管理系统
-- 综合应用:设备位置信息标准化查询与统计
WITH standardized_locations AS (
SELECT
tbname,
LOWER(location) AS std_location,
LOWER(SUBSTRING(location, 1, POSITION('-' IN location) - 1)) AS city,
voltage,
current,
ts
FROM test.meters
)
SELECT
city,
COUNT(DISTINCT tbname) AS device_count,
COUNT(DISTINCT std_location) AS location_count,
ROUND(AVG(voltage), 2) AS avg_voltage,
ROUND(AVG(current), 2) AS avg_current,
MIN(voltage) AS min_voltage,
MAX(voltage) AS max_voltage
FROM standardized_locations
WHERE ts >= '2024-01-01'
GROUP BY city
ORDER BY device_count DESC;
这个综合示例展示了如何使用 LOWER 函数实现:
- 位置信息标准化
- 不区分大小写的城市提取
- 跨城市的设备统计分析
- 电压等指标的聚合计算
关于 TDengine
TDengine 专为物联网IoT平台、工业大数据平台设计。其中,TDengine TSDB 是一款高性能、分布式的时序数据库(Time Series Database),同时它还带有内建的缓存、流式计算、数据订阅等系统功能;TDengine IDMP 是一款AI原生工业数据管理平台,它通过树状层次结构建立数据目录,对数据进行标准化、情景化,并通过 AI 提供实时分析、可视化、事件管理与报警等功能。
更多推荐



所有评论(0)