您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

ASCII 输入转换

将 ASCII 输入数据转换为二进制。

使用 ASCII 转换选项可以:

  • 将 ASCII 输入数据转换为二进制类型并指定输入列的宽度,以便正确读取该列中的数据,或者

  • 当输入列的宽度不同于目标列的宽度时,将 ASCII 数据插入到 ASCII 数据类型列。您可以使用该选项指定应为每列读取的输入数据量。

    您可以将此选项用于任何 SAP IQ 数据类型、带有 1、2 或 4 个前缀字节以及带有列分隔符的数据类型。

    截断 VARCHAR 和 CHAR 列的数据

    如果输入列宽度大于目标列宽度,SAP IQ 将在插入时截断数据。

    如果输入数据宽度小于目标列宽度,对于 CHARVARCHAR 数据类型,SAP IQ 将在插入时在表中使用空格填充数据。

    VARCHAR 列插入可变宽度将不会剪裁尾随空格,而向 VARCHAR 列插入固定宽度则会剪裁尾随空格。例如,假定要插入到 varcolumn 表的 vartable 列。以下命令将构成一个固定宽度的插入,由于您显式指定应包含两个空白(此处通过 __ 表示),因此不会剪裁此插入中的值:

    INSERT INTO vartable VALUES ('box__')

    如果您改用分隔输入从平面文件插入相同值,此插入的宽度则是可变的,因此将剪裁尾随空白。

    ASCII 转换选项将处理 SAP IQ 数据类型。本示例从 ASCII 平面文件 shipinfo.t 向 SAP IQ 表 lineitem 插入数据,并概述了输入数据和表的内容和格式。

    文件 shipinfo.t表 lineitem列格式宽度列数据类型宽度l_shipmodeCHAR15l_shipmodeVARCHAR30l_quantityASCII8l_quantityINT4 

    对于 l_shipmode 列,您需要将 ASCII 数据插入到 ASCII 列(数据类型为 VARCHAR)。请注意,两个列的宽度不同。为了使此列及后续 l_quantity 列上的插入准确无误,应指定 l_shipmode 列的宽度,以便在正确位置读取正确的输入数据量。

    对于 l_quantity 列,您需要将 ASCII 数据插入到二进制列(INT 数据类型)。为了使此列上的插入准确无误,必须将输入数据转换为二进制类型,并指明输入列的宽度。

    下面的 UNIX 示例显示了此命令:

    LOAD TABLE lineitem(
    

    l_shipmode ASCII(15),

    l_quantity ASCII(8),

    FILLER(1))

    FROM '/d1/MILL1/shipinfo.t'

    PREVIEW ON