【发布时间】:2014-07-01 21:10:42
【问题描述】:
A表
id varchar(30)
我正在尝试重新创建一个逻辑,我必须使用 9 位 ID,而不管 Id 字段的值的实际长度如何。
因此,例如,如果 Id 的长度为 6,我需要用 3 个前导零填充。实际长度可以是 1 到 9 之间的任何值。
任何想法如何在 Teradata SQL 中实现这一点?
【问题讨论】:
A表
id varchar(30)
我正在尝试重新创建一个逻辑,我必须使用 9 位 ID,而不管 Id 字段的值的实际长度如何。
因此,例如,如果 Id 的长度为 6,我需要用 3 个前导零填充。实际长度可以是 1 到 9 之间的任何值。
任何想法如何在 Teradata SQL 中实现这一点?
【问题讨论】:
如果实际长度为 1 到 9 个字符,为什么将列定义为 VarCar(30)?
如果是数字列就很简单了:
CAST(CAST(numeric_col AS FORMAT '9(9)') AS CHAR(9))
对于字符串,没有这样的 FORMAT,但根据您的版本,您可能有一个 LPAD 函数:
LPAD(string_col, 9, '0')
否则是:
SUBSTRING('000000000' FROM CHAR_LENGTH(string_col)+1) || string_col,
如果有超过九个字符,所有之前的计算都会返回它们。
如果您想截断(或使用 CHAR 而不是 VARCHAR 结果),您必须添加最终的 CAST AS CHAR(9)
最后,如果有前导或尾随空格,您可能需要使用TRIM(string_col)
【讨论】:
AS FORMAT '9(9)'的语法吗?
9 表示包含前导零,(9) 重复前一个格式字符 9 次,所以它与 999999999 相同。见info.teradata.com/htmlpubs/DB_TTU_14_00/index.html#page/…