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

在插入时转换数据

如果输入到 SAP IQ 数据库的数据来自多种来源,那么并非所有数据都将和 SAP IQ 数据类型精确匹配。即需要转换部分数据。

可显式或隐式转换数据。例如,要将 INT 数据插入到 CHAR 列,则需要进行显式转换。

隐式转换可能会在以下情况下发生:

  • 插入从同一数据库的另一列中选择的数据

  • 插入从另一数据库中选择的数据

  • 装载平面文件中的数据

    当需要进行显式转换时,您指定转换的方式取决于您是从平面文件中装载还是插入所选行:

  • 在 LOAD TABLE 语句中,通过在 中指定格式来显式转换数据。

  • INSERT 语句中,可以在 SELECT 语句或 VALUES 列表中使用数据转换函数 CAST、CONVERT 和 DATEPART 来显式转换数据。

    尽管大多数 SAP IQ 数据类型都与同名的 SAP SQL Anywhere 和 SAP ASE 数据类型完全兼容,但是它们之间还是有些差异。

    为了在不同的版本之间实现兼容性,已经将几个数据类型定义为其它数据类型的同义词:

  • DECIMALNUMERIC 的同义词。

  • INTEGERINT 的同义词。

  • DATETIME 是 TIMESTAMP 的同义词。

  • FLOAT () 是 REAL 或 DOUBLE 的同义词,具体取决于 的值。对于 SAP ASE,REAL 用于值小于或等于 15 的 ,而 DOUBLE 用于值大于 15 的 。对于 SAP IQ 和 SAP SQL Anywhere,分界值与平台相关,但在所有平台上分界值都大于 22。

  • MONEY 是与 SAP ASE 兼容的 NUMERIC(19,4) 的同义词,允许使用 NULL

  • SMALLMONEY 是与 SAP ASE 兼容的 NUMERIC(10,4) 的同义词,允许使用 NULL

    您可以将同义词与其标准数据类型互换使用。当存在同义词时,数据在内部以标准数据类型存储。在错误消息中,将显示标准名称来代替同义词。 注意当将数字和日期数据类型转换为 CHARVARCHAR 时,SAP IQ 不会不加提示地截断转换结果。如果以下数据类型转换的字符串的长度超出了列宽,则生成转换错误: TINYINT、SMALLINT、[UNSIGNED] { INT | INTEGER }、[ UNSIGNED ] BIGINTNUMERIC、DECIMALFLOAT、DOUBLE、REALDATE、DATETIME、SMALLDATETIME、TIME、TIMESTAMP在转换错误的情况下,CONVERSION_ERROR 选项控制 SAP IQ 行为。当选项 CONVERSION_ERROR 被设置为: OFF – SAP IQ 将在适当情况下插入 NULLON – SAP IQ 回退插入并记录转换错误