前言
在informix11.7上准备了一些数据.
informix有些数据类型的操作用SQL语句执行时,有特定的写法。
实验
实验环境
informix 11.70 + DbVisualizer v10.0.1 64位 + informix Server Studio 10.0 x86
参考
https://www.ibm.com/support/knowledgecenter/SSGU8G_12.1.0/com.ibm.sqls.doc/sqls.htm
https://www.ibm.com/support/knowledgecenter/SSGU8G_12.1.0/com.ibm.sqls.doc/ids_sqs_0228.htm
https://www.ibm.com/support/knowledgecenter/SSGU8G_12.1.0/com.ibm.esqlc.doc/ids_esqlc_0168.htm
操作数据类型的备注
- 一个表中只能有一个serial字段(bigserial or serial)
- SERIAL类型一定是非空的
- blob类型无法用update语句来更新
byte,blob, clob, text 数据类型都是blob数据类型.
ref : http://www-01.ibm.com/support/docview.wss?uid=swg21652966
如果是insert blob类型的数据,是用LOAD本地文件来引入blob数据的,没实验。 - DATETIME和INTERVAL有好多小类型,为什么要这么弄? 这些类型自己实验,实验不出来,对应的类型填什么数据能过, 官方的例子也不多. informix Server Studio完整版是可以通过导出数据的备份SQL来看插入,更新这些数据时,SQL怎么写。可是手头这个informix Server Studio的授权不全,很多功能都没有.
- 如果sql写错了,可以在Server Studio和DbVisualizer分别执行,总能看到sql执行错误的原因.
实验通过的SQL语句
建表
create table 'informix'.tbl_full_data_type (
col_serial SERIAL not null,
col_boolean boolean,
col_byte BYTE,
col_char CHAR(1),
col_character VARCHAR(1,1),
col_varchar VARCHAR(1,1),
col_nchar NCHAR(1),
col_nvarchar NVARCHAR(1,1),
col_lvarchar lvarchar,
col_smallint SMALLINT,
col_integer INT,
col_int8 INT8,
col_bigint BIGINT,
col_decimal DECIMAL(16),
col_numeric DECIMAL(16),
col_smallfloat SMALLFLOAT,
col_float FLOAT,
col_double FLOAT,
col_blob blob,
col_clob clob,
col_text TEXT,
col_money MONEY(16,2),
col_date DATE,
col_datetime_01 DATETIME FRACTION TO FRACTION,
col_datetime_02 DATETIME SECOND TO FRACTION,
col_datetime_03 DATETIME SECOND TO SECOND,
col_datetime_04 DATETIME MINUTE TO FRACTION,
col_datetime_05 DATETIME MINUTE TO SECOND,
col_datetime_06 DATETIME MINUTE TO MINUTE,
col_datetime_07 DATETIME HOUR TO FRACTION,
col_datetime_08 DATETIME HOUR TO SECOND,
col_datetime_09 DATETIME HOUR TO MINUTE,
col_datetime_10 DATETIME HOUR TO HOUR,
col_datetime_11 DATETIME DAY TO FRACTION,
col_datetime_12 DATETIME DAY TO SECOND,
col_datetime_13 DATETIME DAY TO MINUTE,
col_datetime_14 DATETIME DAY TO HOUR,
col_datetime_15 DATETIME DAY TO DAY,
col_datetime_16 DATETIME MONTH TO FRACTION,
col_datetime_17 DATETIME MONTH TO SECOND,
col_datetime_18 DATETIME MONTH TO MINUTE,
col_datetime_19 DATETIME MONTH TO HOUR,
col_datetime_20 DATETIME MONTH TO DAY,
col_datetime_21 DATETIME MONTH TO MONTH,
col_datetime_22 DATETIME YEAR TO FRACTION,
col_datetime_23 DATETIME YEAR TO SECOND,
col_datetime_24 DATETIME YEAR TO MINUTE,
col_datetime_25 DATETIME YEAR TO HOUR,
col_datetime_26 DATETIME YEAR TO DAY,
col_datetime_27 DATETIME YEAR TO MONTH,
col_datetime_28 DATETIME YEAR TO YEAR,
col_interval_01 INTERVAL FRACTION TO FRACTION,
col_interval_02 INTERVAL SECOND TO FRACTION,
col_interval_03 INTERVAL SECOND TO SECOND,
col_interval_04 INTERVAL MINUTE TO FRACTION,
col_interval_05 INTERVAL MINUTE TO SECOND,
col_interval_06 INTERVAL MINUTE TO MINUTE,
col_interval_07 INTERVAL HOUR TO FRACTION,
col_interval_08 INTERVAL HOUR TO SECOND,
col_interval_09 INTERVAL HOUR TO MINUTE,
col_interval_10 INTERVAL HOUR TO HOUR,
col_interval_11 INTERVAL DAY TO FRACTION,
col_interval_12 INTERVAL DAY TO SECOND,
col_interval_13 INTERVAL DAY TO MINUTE,
col_interval_14 INTERVAL DAY TO HOUR,
col_interval_15 INTERVAL DAY TO DAY,
col_interval_16 INTERVAL MONTH TO MONTH,
col_interval_17 INTERVAL YEAR TO MONTH,
col_interval_18 INTERVAL YEAR TO YEAR
)
增加表字段
alter table tbl_full_data_type add (col_BOOLEAN BOOLEAN);
alter table tbl_full_data_type add (
col_CHARACTER CHARACTER VARYING,
col_VARCHAR VARCHAR,
col_nchar nchar,
col_nvarchar nvarchar,
col_lvarchar lvarchar
);
插入记录
INSERT INTO tbl_full_data_type
(
col_serial, col_boolean, col_char,
col_character, col_varchar, col_nchar, col_nvarchar, col_lvarchar,
col_smallint, col_integer, col_int8, col_bigint, col_decimal, col_numeric, col_smallfloat, col_float, col_double,
col_datetime_03, col_datetime_28
) VALUES (
2000, 't', '2',
'3', '4', '5', '6', '7',
8, 9, 10, 11, 12, 13, 14.5, 15.6, 16.7,
'58', '1974'
);
选择语句
可以抓单个字段的小包
select col_serial from tbl_full_data_type where col_serial = 2000;
select col_boolean from tbl_full_data_type where col_serial = 2000;
select col_datetime_28 from tbl_full_data_type where col_serial = 2000;
select col_nvarchar from tbl_full_data_type where col_serial = 2000;
select col_nvarchar, col_serial from tbl_full_data_type where col_serial = 2000;
更新语句
boolean 的SQL值为’f’ or ‘t’
‘t’ is true
‘f’ is false
update tbl_full_data_type
set
col_BOOLEAN = 'f'
where col_serial = 1000
update tbl_full_data_type
set
col_DATETIME_01 = '3.5'
where col_serial = 1000