当前位置: 首页 > news >正文

TDengine 字符串函数 LENGTH 用户手册

在这里插入图片描述

LENGTH 函数使用手册

函数概述

函数名称: LENGTH

函数类型: 字符串标量函数

功能说明: 返回字符串的字节长度。对于变长类型(VARCHAR、NCHAR、VARBINARY)返回实际存储的字节数。

支持版本: TDengine 3.0+

语法格式

LENGTH(expr)

参数说明

参数说明数据类型是否必填
expr要计算长度的字符串表达式VARCHAR、NCHAR、VARBINARY

返回值

  • 返回类型: BIGINT
  • 返回说明:
    • 返回字符串的字节长度
    • 如果参数为 NULL,返回 NULL
    • 对于 NCHAR 类型,返回实际 UTF-8 编码的字节数

与 CHAR_LENGTH 的区别

函数计数单位示例结果
LENGTH字节数LENGTH('你好')6
CHAR_LENGTH字符数CHAR_LENGTH('你好')2

使用场景示例

场景一:设备位置信息验证

业务背景: 电表安装时需要记录详细位置信息,系统需要验证位置描述的长度是否符合要求

-- 创建超级表
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 District Jianguomenwai Avenue Building A Room 2001') 
VALUES ('2024-01-15 08:00:00', 10.5, 220, 0.85);INSERT INTO test.d002 USING test.meters TAGS(2, '上海市浦东新区陆家嘴金融中心东塔20层') 
VALUES ('2024-01-15 08:00:00', 8.3, 218, 0.90);-- 查询:检查位置信息长度是否超过限制
SELECT tbname,location,LENGTH(location) as bytes_len,CHAR_LENGTH(location) as char_len,CASE WHEN LENGTH(location) > 80 THEN '位置描述过长,建议简化'WHEN LENGTH(location) < 10 THEN '位置描述过短,建议补充'ELSE '位置描述合适'END as validation_result
FROM test.meters;

输出示例:

tbname | location                                              | bytes_len | char_len | validation_result
-------|-------------------------------------------------------|-----------|----------|-------------------
d001   | Beijing Chaoyang District Jianguomenwai Avenue...    | 66        | 66       | 位置描述合适
d002   | 上海市浦东新区陆家嘴金融中心东塔20层                    | 57        | 21       | 位置描述合适

目的:

  • 确保位置信息符合数据库字段长度限制
  • 避免因长度超限导致数据截断
  • 区分字节长度和字符长度,处理中英文混合场景

场景二:数据存储优化分析

业务背景: 分析标签字段的实际存储占用,优化数据库schema设计

-- 统计不同位置信息的存储占用情况
SELECT MIN(LENGTH(location)) as min_bytes,MAX(LENGTH(location)) as max_bytes,AVG(LENGTH(location)) as avg_bytes,COUNT(*) as total_devices,SUM(LENGTH(location)) as total_storage_bytes
FROM test.meters;-- 找出存储占用最大的设备位置
SELECT tbname,location,LENGTH(location) as storage_bytes
FROM test.meters
ORDER BY LENGTH(location) DESC
LIMIT 10;

输出示例:

min_bytes | max_bytes | avg_bytes | total_devices | total_storage_bytes
----------|-----------|-----------|---------------|--------------------
10        | 98        | 45        | 1000          | 45000

目的:

  • 评估VARCHAR字段的实际使用情况
  • 判断是否可以缩小字段定义以节省存储空间
  • 识别异常数据(过长或过短的记录)

场景三:数据质量监控

业务背景: 监控位置信息的数据质量,发现空值、异常短内容等问题

-- 创建数据质量监控视图
SELECT COUNT(*) as total_count,COUNT(CASE WHEN location IS NULL THEN 1 END) as null_count,COUNT(CASE WHEN LENGTH(location) = 0 THEN 1 END) as empty_count,COUNT(CASE WHEN LENGTH(location) < 5 THEN 1 END) as too_short_count,COUNT(CASE WHEN LENGTH(location) > 90 THEN 1 END) as too_long_count,AVG(LENGTH(location)) as avg_length
FROM test.meters;-- 查询数据质量异常的设备
SELECT tbname,groupid,location,LENGTH(location) as len,CASE WHEN location IS NULL THEN '位置信息缺失'WHEN LENGTH(location) = 0 THEN '位置信息为空'WHEN LENGTH(location) < 5 THEN '位置信息过短'WHEN LENGTH(location) > 90 THEN '位置信息过长'END as issue_type
FROM test.meters
WHERE location IS NULL OR LENGTH(location) = 0 OR LENGTH(location) < 5 OR LENGTH(location) > 90;

目的:

  • 自动化数据质量检查
  • 及时发现数据录入问题
  • 为数据清洗提供依据

场景四:字符编码分析

业务背景: 分析位置信息中中英文字符的占比,用于系统国际化评估

-- 分析位置信息的字符特征
SELECT tbname,location,LENGTH(location) as byte_len,CHAR_LENGTH(location) as char_len,ROUND(LENGTH(location) * 1.0 / CHAR_LENGTH(location), 2) as bytes_per_char,CASE WHEN LENGTH(location) = CHAR_LENGTH(location) THEN '纯ASCII字符'WHEN LENGTH(location) > CHAR_LENGTH(location) * 2 THEN '主要为中文'ELSE '中英文混合'END as content_type
FROM test.meters
WHERE location IS NOT NULL;

输出示例:

content_type  | device_count | avg_byte_len | avg_char_len
--------------|--------------|--------------|-------------
纯ASCII字符   | 350          | 42.50        | 42.50
主要为中文    | 450          | 48.30        | 17.20
中英文混合    | 200          | 45.80        | 25.60

目的:

  • 了解数据的字符组成特征
  • 评估存储空间利用率
  • 为前端显示宽度设置提供参考

场景五:批量数据迁移验证

业务背景: 在系统升级或数据迁移时,验证VARCHAR字段长度是否会超出新系统限制

-- 模拟:将location字段从VARCHAR(100)迁移到VARCHAR(50)
-- 检查哪些数据会被截断
SELECT tbname,location,LENGTH(location) as current_bytes,CASE WHEN LENGTH(location) <= 50 THEN '可以安全迁移'ELSE CONCAT('需要截断 ', CAST(LENGTH(location) - 50 AS VARCHAR(10)), ' 字节')END as migration_status,SUBSTRING(location, 1, 50) as truncated_value
FROM test.meters
WHERE LENGTH(location) > 50
ORDER BY LENGTH(location) DESC;-- 统计迁移影响范围
SELECT COUNT(*) as total_records,COUNT(CASE WHEN LENGTH(location) <= 50 THEN 1 END) as safe_records,COUNT(CASE WHEN LENGTH(location) > 50 THEN 1 END) as affected_records,ROUND(COUNT(CASE WHEN LENGTH(location) > 50 THEN 1 END) * 100.0 / COUNT(*), 2) as affected_percentage
FROM test.meters;

目的:

  • 评估schema变更的影响范围
  • 避免数据迁移导致的数据丢失
  • 为数据清洗策略提供依据

性能考虑

  1. 索引友好: LENGTH函数可以用于WHERE子句,如果字段上有索引,查询效率较高
  2. 计算开销: 对于VARCHAR/NCHAR类型,LENGTH计算开销很小,为O(1)复杂度
  3. 避免重复计算: 在复杂查询中,建议使用子查询或CTE缓存LENGTH结果

注意事项

  1. NULL处理: LENGTH(NULL) 返回 NULL
  2. 空字符串: LENGTH(‘’) 返回 0
  3. 多字节字符:
    • 中文字符在UTF-8编码下通常占3个字节
    • 使用CHAR_LENGTH获取字符数而非字节数
  4. VARBINARY类型: LENGTH可用于VARBINARY,返回二进制数据的字节长度

相关函数

  • CHAR_LENGTH(): 返回字符数而非字节数
  • SUBSTRING(): 按字节位置截取字符串
  • LTRIM()/RTRIM(): 移除空格后可能改变长度
  • UPPER()/LOWER(): 大小写转换不改变字节长度

示例:综合应用

-- 智能电表位置信息完整性报告
SELECT '位置信息质量报告' as report_name,COUNT(*) as total_devices,COUNT(CASE WHEN location IS NOT NULL AND LENGTH(location) >= 10 THEN 1 END) as valid_locations,COUNT(CASE WHEN location IS NULL OR LENGTH(location) = 0 THEN 1 END) as missing_locations,COUNT(CASE WHEN LENGTH(location) > 0 AND LENGTH(location) < 10 THEN 1 END) as incomplete_locations,ROUND(COUNT(CASE WHEN location IS NOT NULL AND LENGTH(location) >= 10 THEN 1 END) * 100.0 / COUNT(*), 2) as completeness_rate,ROUND(AVG(LENGTH(location)), 2) as avg_location_length,MAX(LENGTH(location)) as max_location_length
FROM test.meters;

关于 TDengine

TDengine 专为物联网IoT平台、工业大数据平台设计。其中,TDengine TSDB 是一款高性能、分布式的时序数据库(Time Series Database),同时它还带有内建的缓存、流式计算、数据订阅等系统功能;TDengine IDMP 是一款AI原生工业数据管理平台,它通过树状层次结构建立数据目录,对数据进行标准化、情景化,并通过 AI 提供实时分析、可视化、事件管理与报警等功能。

http://www.dtcms.com/a/597289.html

相关文章:

  • Kotlin-协程的挂起与恢复
  • 莱州网站建设有限公司网站页面架构
  • 【Java SE 基础学习打卡】09 JRE 与 JDK
  • 无人机12V锂电池管理控制器方案学习,BQ40Z50
  • React核心概念Mutation
  • 企业建设好一个网站后_如何进行网站推广?网页设计大作业模板
  • VMware Ubuntu 22.04 NAT模式下配置GitHub SSH完整教程(含踩坑实录+报错_成功信息对照)
  • 文生图模型攻击论文原理笔记
  • Goer-Docker系统-1-Dockerfile的构建速度优化
  • 代做网页设计平台站长工具seo综合查询隐私查询导航
  • 方形与圆形滚珠导轨在工业场景如何选型?
  • UCOS-III笔记(一)
  • Unity:lua热更新(一)——AB包AssetBundle、Lua语法
  • 如何在Dev-C++中配置编译选项以支持C++11?
  • 海城区建设局网站快速百度
  • 网站怎样设计网址大全关键词排名提高方法
  • HOT100题打卡第36天——二分查找
  • 【Linux】Linux内存管理与线程控制核心解析
  • dns服务器
  • bash 启动程序的流程
  • 专题:2025中国医疗器械出海现状与趋势创新发展研究报告|附160+份报告PDF、数据、可视化模板汇总下载
  • 工程建设最好的网站石家庄建设网站哪家好
  • c#笔记之面向对象
  • wordpress 移动到回收站发生错误广告公司网络推广计划
  • 汽车乘员热舒适测评的预测模型
  • [6]. SpringAI Alibaba 向量化和向量数据库
  • java学习--包
  • 乐鑫EchoEar开发套件详解:ESP32-S3+端侧AI+全双工语音实战
  • 国外的外贸网站wordpress 页面下文章列表
  • 站长工具服务器查询常州市建设工程管理中心网站