转自
http://action929.itpub.net/post/28194/306348
===========================================================作者: action929(http://action929.itpub.net)
发表于:2007.07.10 15:45
分类: Sybase
出处:http://action929.itpub.net/post/28194/306348
---------------------------------------------------------------今天有同事问我一个建表时候的错误:
1> create table aabbccddee( a timestamp,b timestamp)
2> go
Msg 2738, Level 16, State 2:
Server 'ipnet', Line 1:
A table can only have one timestamp column. Since table 'aabbccddee' already
has one, you can't add the column 'b'.
不能建2个时间类型?咋可能呢,上网查了一下
Sybase数据库中的timestamp为用户定义数据类型,它实际为varbinary(8)类型,但很多工程师把它当作date或time类型,这是错误的。其实在Sybase数据库中每一个数据库都会有一个全局timestamp,它被存放在dbtable内存结构中,它是一个顺序号,用于跟踪数据库中数据页的修改情况,主要被系统使用进行自身维护工作。用户不可以直接修改处理这种数据类型的数据,但使用DB-Library编程可以处理,特殊用户一般使用该数据类型来代替identity类型数据,需要注意的是,这个值只可以增大,不可以减小。
做了下测试:
1> create table test1(id int,times timestamp,times2 datetime)
2> go
1> insert into test1 values(1,null,getdate())
2> go
(1 row affected)
1> select * from test1
2> go
id times times2
----------- ------------------ --------------------------
1 0x0000000000faefd1 Jul 10 2007 3:43PM
(1 row affected)
1> insert into test1 values(2,0x11111,getdate())
2> go
Warning: A non-null value cannot be inserted into a TIMESTAMP column by the
user. The database timestamp value has been inserted into the TIMESTAMP field
instead.
(1 row affected)
1> insert into test1 values(2,getdate())
2> go
Warning: A non-null value cannot be inserted into a TIMESTAMP column by the
user. The database timestamp value has been inserted into the TIMESTAMP field
instead.
Msg 213, Level 16, State 4:
Server 'ipnet', Line 1:
Insert error: column name or number of supplied values does not match table
definition.
1> create table test11(id int,id2 int identity)
2> go
1> insert into test11 values (null,1)
2> go
Msg 7743, Level 16, State 1:
Server 'ipnet', Line 1:
An explicit value for the identity field in table 'test11' can only be specified
in an insert statement when a field list is used.
1> insert into test11 values (2,1)
2> go
Msg 7743, Level 16, State 1:
Server 'ipnet', Line 1:
An explicit value for the identity field in table 'test11' can only be specified
in an insert statement when a field list is used.
1> insert into test11 values (1)
2> go
(1 row affected)
1> select * from test11
2> go
id id2
----------- -----------
1 1
(1 row affected)
总结下: identity和timestamp用起来差不多,区别在于
(1) identity 的列,不能出现在insert语句中,而timestamp必须出现,而且必须为null。
(2)identity的值,是在表一级唯一,timestamp的值是在数据库一级唯一。
(3)identity的类型可以自己指定,timestamp不可以
自己在ASE 12环境下测试了:
drop table testing;
create table testing(c1 int, ts timestamp, c2 int);
insert into testing(c1, ts , c2) values(112,'2009-08-21',123);
数据可以insert成功,只是报警告,为null时正常:
Server Message: Number 273, Severity 10
Server 'SYBAE', Line 1:
Warning: A non-null value cannot be inserted into a TIMESTAMP column by the user. The database timestamp value has been inserted into the TIMESTAMP field instead.
insert into testing(c1 , c2) values(102,113);
select * from testing;
查询结果:
c1 ts c2
----------- -- -----------
112 0x0000000003078a06 123
102 0x0000000003078a19 113
分享到:
相关推荐
例如,当你使用`PreparedStatement`的`setXXX`方法时,你需要根据Sybase的列类型选择正确的方法,如`setInt`、`setDouble`、`setString`或`setTimestamp`。 标签中的“源码”可能指的是查看和理解JDBC驱动程序的源...
这包括数值型(如INT、FLOAT)、字符型(如VARCHAR、CHAR)、日期/时间型(如DATE、TIMESTAMP)以及其他复杂类型。 ### 8. **事务与并发控制** 手册还会讨论事务的概念,包括ACID属性(原子性、一致性、隔离性和...
首先,Sybase支持多种日期时间类型,包括`DATE`(日期)、`TIME`(时间)、`DATETIME`(日期时间)和`TIMESTAMP`(时间戳)。其中,`DATE`仅存储日期部分,格式为YYYY-MM-DD;`TIME`存储时间部分,格式为HH:MM:SS;`...
需要注意的是,在处理特定数据类型(如DATE、TIME、TIMESTAMP、NUMERIC和DECIMAL)时,应遵循正确的格式要求。 - **空值装载**:处理空值是一项重要的考虑因素。Sybase IQ提供了多种方式来处理空值,包括替换空值或...
- **日期和时间类型**(如DATETIME、TIMESTAMP):用于存储日期和时间数据。 - **二进制类型**(如BINARY、VARBINARY):用于存储二进制数据。 - **特殊类型**(如BIT、CLOB、BLOB):用于存储位、大型文本和二进制...
其中,`datatype`可以是如`smallint`, `integer`, `decimal`, `float`, `double`, `char`, `varchar`, `graphic`, `vargraphic`, `date`, `time`, `timestamp`等数据类型。`NOT NULL`表示该字段不允许为空,`...
在本表格中,我们可以看到不同的数据类型,如 BIGINT、BINARY、BIT、BLOB、CHAR、CLOB、DATE、DECIMAL、DOUBLE、FLOAT、INTEGER、JAVA_OBJECT、LONGVARCHAR、NUMERIC、OTHER、REAL、SMALLINT、TIME、TIMESTAMP、...
Sybase中的`datetime`对应于Greenplum的`timestamp`或`date`,具体取决于是否需要时间部分。`tinyint`映射到`smallint`,`unsigned bigint`通常对应`bigint`,`decimal(20)`和`double`在Greenplum中可以用`double ...
- **日期时间型**: 如`datetime`、`timestamp`等,用于存储日期和时间信息。 - **二进制型**: 如`binary`、`varbinary`等,用于存储二进制数据。 ##### 2. 内置函数 - **数学函数**: 如`ABS`(取绝对值)、`CEILING...
- **Datetime vs Timestamp**: SYBASE中的`Datetime`类型在DB2中对应为`Timestamp`。 - **Tinyint, Smallint**: 这些类型在SYBASE中可以直接映射到DB2的`Smallint`类型。 - **Money**: SYBASE中的`Money`类型可以...
- DATETIME:与Adaptive Server Enterprise兼容,实现为TIMESTAMP类型。 - SMALLDATETIME:同样是TIMESTAMP的实现,用于兼容性。 - TIME:表示一天中的时间,精确到秒和秒的小数部分,占用8个字节。 - TIMESTAMP...
Sybase IQ提供了DATE、DATETIME、SMALLDATETIME和TIMESTAMP四种类型。DATE包含年、月、日;DATETIME和TIMESTAMP提供更高精度的时间点,包括秒和秒的小数部分;SMALLDATETIME则在精度上稍逊,不包含秒的小数部分。在...
- **参数传递:**支持IN、OUT和IN/OUT类型参数,便于灵活地进行数据交互。 - **错误处理:**提供TRY…CATCH结构来捕获和处理运行时错误。 #### 二、Sybase提供的函数 除了标准SQL函数外,《sybase_handbook》还详细...
Sybase支持多种数据类型,每种类型都有其特定的应用场景: - **Smallint**: 16位整数。 - **Integer**: 32位整数。 - **Decimal(p,s)**: 十进制数,其中`p`表示总位数,`s`表示小数点后的位数。 - **Float**: 32位...
本文档主要整理了Sybase IQ的一些关键知识点,包括数据库创建、数据类型、日期和时间格式,以及特定的函数用法。 首先,创建数据库的脚本展示了如何定义数据库的基本配置。例如,`CREATE DATABASE`语句用于创建...
Sybase 支持多种数据类型,如 `CHAR`, `VARCHAR`, `TEXT`, `NUMERIC`, `DECIMAL`, `INTEGER`, `FLOAT`, `DATE`, `TIME`, `TIMESTAMP` 等,它们分别用于存储不同类型的数据,如固定长度字符串、可变长度字符串、数字...
尽管Sybase IQ支持大多数标准SQL数据类型,但也有部分类型是不被支持的,例如: - 自定义类型:不支持用户自定义的复杂数据类型。 - 特殊类型:例如,某些特殊的地理空间数据类型可能不受支持。 #### 构建UDF 构建...