teradata sql中的零填充

use*_*687 2 sql teradata

表A
Id varchar(30)

我正在尝试重新创建一个逻辑,我必须使用9位数字ID而不管Id字段的值的实际长度.
因此,例如,如果Id的长度为6,我需要使用3个前导零左键.实际长度可以是1到9之间的任何长度.

有任何想法如何在Teradata SQL中实现这一点?

dno*_*eth 14

如果实际长度为1到9个字符,为什么列定义为VarCar(30)?

如果它是一个数字列,那将很容易:

CAST(CAST(numeric_col AS FORMAT '9(9)') AS CHAR(9))
Run Code Online (Sandbox Code Playgroud)

对于字符串,没有像这样的FORMAT,但根据您的发布,您可能具有LPAD函数:

LPAD(string_col, 9, '0')
Run Code Online (Sandbox Code Playgroud)

否则它是:

SUBSTRING('000000000' FROM CHAR_LENGTH(string_col)+1) || string_col,
Run Code Online (Sandbox Code Playgroud)

如果超过九个字符,之前的所有计算都将返回它们.

如果要截断(或CHAR而不是VARCHAR结果),则必须添加final CAST AS CHAR(9)

最后,如果您可能想要使用前导或尾随空白 TRIM(string_col)

  • @Jubbles:这是Cobol风格,`9`表示包含前导零和`(9)`重复前一个格式化字符9次,所以它与`999999999`相同.请参阅http://www.info.teradata.com/htmlpubs/DB_TTU_14_00/index.html#page/SQL_Reference/B035_1143_111A/ch09.051.40.html#ww13915817 (2认同)