如何在Teradata中编写查询筛选长度不足11位的列值
Teradata查询指定列位数不足11位取值的实现方案
场景1:目标列为字符类型(VARCHAR/CHAR等)
直接使用CHAR_LENGTH函数统计字符长度即可,建议搭配TRIM去除前后空格避免统计误差:
SELECT 待检查列名, CHAR_LENGTH(TRIM(待检查列名)) AS 实际字符长度 FROM 你的表名 WHERE CHAR_LENGTH(TRIM(待检查列名)) < 11;
场景2:目标列为数值类型(INT/BIGINT等)
需要先将数值转为字符后再统计长度,也可以直接通过数值范围判断:
方案A:转字符后统计长度
SELECT 待检查列名, CHAR_LENGTH(CAST(待检查列名 AS VARCHAR(11))) AS 实际字符长度 FROM 你的表名 WHERE CHAR_LENGTH(CAST(待检查列名 AS VARCHAR(11))) < 11;
方案B:数值范围直接判断(性能更优)
11位数字的最小取值为10000000000(10的10次方),数值小于这个值即可判定为不足11位:
SELECT 待检查列名 FROM 你的表名 WHERE 待检查列名 < 10000000000;
补充说明
- 若需要去重返回所有异常取值,在
SELECT后添加DISTINCT关键字即可 - 注意区分
CHAR_LENGTH(统计字符数)和BYTES(统计字节数)的差异,字符类列检查优先使用CHAR_LENGTH
内容的提问来源于stack exchange,提问作者Bond
相关产品推荐
相关产品推荐

