INSERT语句右值引用基础值
在兼容B模式下,INSERT语句支持右值引用,当被引用列有NOT NULL约束且没有默认值时,将使用其基础值参与计算。若无基础值则继续使用NULL值参与计算(数组类型、用户自定义类型等)。 支持的各类型的基础值如表1所示。
表 1 类型基础值
| 类型 | 基础值 | 备注 |
|---|---|---|
| int | 0 | |
| tinyint | 0 | |
| smallint | 0 | |
| integer | 0 | |
| binary_integer | 0 | |
| bigint | 0 | |
| boolean | f | |
| numeric | 0 | |
| decimal | 0 | |
| dec | 0 | |
| double precision | 0 | |
| float8 | 0 | |
| float | 0 | |
| char(n) | "" | 注意:当字符串参与运算时,会根据内置规则进行值类型转换, 而定长的字符串存储后的值长度与指定长度一致,会填充空白字符(不同存储方式可能会不同) |
| varchar(n) | "" | |
| varchar2(n) | "" | |
| nchar(n) | "" | 注意:当字符串参与运算时,会根据内置规则进行值类型转换, 而定长的字符串存储后的值长度与指定长度一致,会填充空白字符(不同存储方式可能会不同) |
| nvarchar2(n) | "" | |
| nvarchar(n) | "" | |
| date | 01-01-1970 | |
| time | 00:00:00 | |
| timestamp | 当前时间戳 | |
| smalldatetime | Thu Jan 01 00:00:00 1970 | |
| interval year | @ 0 | |
| interval month | @ 0 | |
| interval day | @ 0 | |
| interval hour | @ 0 | |
| interval minute | @ 0 | |
| interval second | @ 0 | |
| interval day to second | @ 0 | |
| interval day to hour | @ 0 | |
| interval day to minute | @ 0 | |
| interval hour to minute | @ 0 | |
| interval hour to second | @ 0 | |
| interval minute to second | @ 0 | |
| reltime | @ 0 | |
| abstime | Wed Dec 31 16:00:00 1969 PST | |
| money | $0.00 | |
| int4range | empty | |
| blob | 数据内容为空的对象 | |
| raw | 数据内容为空的对象 | |
| bytea | \x | |
| point | (0,0) | |
| lseg | [(0,0),(0,0)] | |
| box | (0,0),(0,0) | |
| path | ((0,0)) | |
| polygon | ((0,0)) | |
| circle | <(0,0),0> | |
| cidr | 0.0.0.0/32 | |
| inet | 0.0.0.0 | |
| macaddr | 00:00:00:00:00:00 | |
| BIT | 数据内容为空的对象 | |
| BIT VARYING | 数据内容为空的对象 | |
| UUID | 00000000-0000-0000-0000-000000000000 | |
| json | null | 数据内容为null |
| jsonb | null | 数据内容为null |
| int8range | empty | |
| numrange | empty | |
| tsrange | empty | |
| tstzrange | empty | |
| daterange | empty | |
| hll | \x | |
| SET | "" | |
| tsvector | 数据内容为空的对象 | |
| tsquery | 数据内容为空的对象 | |
| HASH16 | 0000000000000000 | |
| HASH32 | 00000000000000000000000000000000 | |
| enum | 第一项 |
意见反馈