gpt4 book ai didi

sql - Teradata SQL VARCHAR 和空格

转载 作者:搜寻专家 更新时间:2023-10-30 20:08:28 26 4
gpt4 key购买 nike

当我将数字数据简单地插入到 varchar 中时,我不太理解字段为什么它用 2 个空格左填充它。 varchar 不应该去掉空格(尾部没问题......但是你用空格“frontpad”的规则在哪里)。为什么然后用 2 个前导空格填充

INSERT INTO v VALUES  ( ,1243444,3455435,8768810,'fdff',5,7,8,,)

在这里( ,1243444,3455435,8768810,'fdff',5,7,8,,)(someirrelvant_datatype,varchar(x),varchar(y),varchar(z),char(5),smallint,int,int,Timestamp)

所以数据看起来像这样

SEL     CHAR2HEXINT  ( colA ) ,colA FROM v


313732353732 172572 /* this is some other pre-existing value*/
2020202033343535343335 3455435 /* this is value just inserted */

所以如果你看到上面的20202020 2 spaces aka ' ' 的十六进制

第二题(不是上述情况的延续)
我也有像这样的 varchar (50) col 的数据

HMSA
232434343
HMSA
4343434343
434343434

这里是 HMSA有尾随空格 2020 HEX但其他值没有trailing spaces .不确定发生了什么。现在这里不是varchar应该扔掉所有尾随空格吗?数据如何登陆 HMSA<space>没有把握 。有什么想法吗?

好吧,让我们看看由此产生的一些奇怪之处:<​​br/>

insert ( 'yada    ') into tb /* tb is volatile &  SET.There are 4 spaces */
insert ( 'yada') into tb

Query Failed. 2802: Duplicate row error in tb

好的,看看这是什么样子

7961646120202020 yada  /*There are 4 spaces  - 20 x 4 */

所以在第 2 次插入时,它摆脱了空间比较部分并做了一个 trim(oldvalue) vs trim ( new value )

最佳答案

Q1:当您运行 SELECT FORMAT(3455435), TYPE(3455435) 时,您会得到 -(10)9 INTEGER

每种数据类型总是有一个 Cobol 风格的格式,用于与字符串进行转换。在您的情况下,源和目标的数据类型不匹配,Teradata 进行了自动类型转换。整数的格式最多为十位数字加上一个前导符号右对齐

使用标准 SQL CAST 的显式类型转换不应用格式,因此不应用前导空格。因此,只需执行 CAST(3455435 AS VARCHAR(20) 或 (TRIM(3455435)` 即可。

Q2:VarChar 会准确存储您插入的内容,即 '1234 ' 将被存储,包括两个空格。并且基于标准 SQL 比较规则,在比较字符串时忽略尾随空格,因此 'yada''yada' 被认为是相等的(您可能之前使用过 Oracle在这种情况下 t 遵循标准 SQL)。

关于sql - Teradata SQL VARCHAR 和空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39216164/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com