DBASK-数据库管理员结构化知识体系-Structured knowledge system for DataBase Administrators

Home

SAP

SAP ASE 数据类型
(本部分内容,DBA了解即可)

SAP ASE数据类型标准和遵从性




Transact-SQL — ANSI SQL 数据类型

char、varchar、smallint、int、bigint、 decimal、numeric、float、real、date、time、double precision

Transact-SQL 扩展 — 用户定义的数据类型

binary、varbinary、bit、nchar、datetime、smalldatetime、bigdatetime、bigtime、tinyint、unsigned smallint、unsigned int、unsigned bigint、money、smallmoney、text、unitext、image、nvarchar、unichar、univarchar、sysname、longsysname、timestamp

数据类型种类




Adaptive Server 提供了几种系统数据类型和用户定义的数据类型:timestamp、sysname 和 longsysname。

种类 用于
精确数值数据类型必须确切表示的数值(整数和带有小数部分的数)
近似数值数据类型在算术运算中允许舍入的数值数据
money 数据类型货币数据
Timestamp 数据类型在 Client-Library™ 应用程序中浏览的表
日期和时间数据类型日期和时间信息
字符数据类型含有字母、数字和符号的字符串
二进制数据类型类似十六进制的符号中的原始二进制数据,例如图片
bit 数据类型真/假和是/否类型的数据
sysname 和 longsysname 数据类型系统表
text、 image 和 unitext 数据类型可打印字符或十六进制式数据,它们需要的列大小超出了服务器的逻辑页大小所提供的最大列大小。
抽象数据类型Adaptive Server 通过 Java 类支持抽象数据类型
用户定义的数据类型定义继承了此表所列数据类型的规则、缺省值、空值类型、IDENTITY属性和基本数据类型的对象。如果客户端使用另外的字符集,text 会进行字符集转换,而 image 则不会。

Adaptive Server 系统数据类型




· 精确数值:整数

数据类型种类同义词范围存储的字节数
bigint 263 和 -263 - 1(从 -9,223,372,036,854,775,808 到 +9,223,372,036,854,775,807)之间的整数,包括这两个值。8
int integer 231 -1 (2,147,483,647) 到-231(-2,147,483,648)4
smallint 215 -1 (32,767) 到 -215 (-32,768)2
tinyint 0 到 255(不允许使用负数)1
unsigned bigint 0 到 18,446,744,073,709,551,615 之间的整数8
unsigned int 0 到 4,294,967,295 之间的整数4
unsigned smallint 0 到 65535 之间的整数2

· 精确数值:小数

数据类型种类同义词范围存储的字节数
numeric (p, s) 1038 -1 到 -1038 2 到 17
decimal (p, s)dec 1038 -1 到 -1038 2 到 17

· 近似数值

数据类型种类同义词范围存储的字节数
float (precision) 与计算机有关缺省精度 小于 16 时为 4,缺省精度 >= 16 时为 8
double precision 与计算机有关8
real 与计算机有关4

· 货币

数据类型种类同义词范围存储的字节数
smallmoney 214,748.3647 到 -214,748.36484
money 922,337,203,685,477.5807 到 -922,337,203,685,477.5808 8

· 二进制

数据类型种类同义词范围存储的字节数
binary(n) 页大小n
varbinary(n) 页大小
231 -1 (2,147,483,647) 字节或者更少未初始化时为 0;初始化后是 2K 的倍数

· 位

数据类型种类同义词范围存储的字节数
bit 0 或 1 1(1 个字节最多容纳 8 个bit 列)

· 时间/日期

数据类型种类同义词范围存储的字节数
smalldatetime 1900 年 1 月 1 日至 2079 年 6 月 6 日4
datetime1753 年 1 月 1 日至9999年12月31日 8
date 0001 年 1 月 1 日至 9999年12月31日4
bigdatetime 0001 年 1 月 1 日至 9999年12月31日,12:00.000000AM 至11:59:59.999999 PM8
bigtime 12:00:00.000000 AM 至 11:59:59.999999 PM8

· 字符

数据类型种类同义词范围存储的字节数
char(n) character 页大小n
varchar(n) character varying、char varying 页大小实际条目长度
unichar Unicode 字符 页大小n * @@unicharsize(@@unicharsize 等于 2)
univarcharUnicode 字符 varying、char varying 页大小实际字符数 *@@unicharsize
nchar(n) national character、national char 页大小n * @@ncharsize
nvarchar(n) nchar varying、national char varying、national character varying 页大小@@ncharsize * 字符数
text 231 -1 (2,147,483,647) 字节或者更少未初始化时为 0;初始化后是 2K 的倍数
unitext 1 — 1,073,741,823未初始化时为 0;初始化后是 2K 的倍数

时间日期类型




缺省值(style 0 或 100)和 style 9 或 109 返回世纪 (yyyy)。如果从smalldatetime 转换为 char 或 varchar,包括秒或毫秒的样式将在这些位置上显示零。

“mon”表示英文拼写的月份,“mm”表示月份或分钟。“HH”表示 24 小时制时钟值,“hh”表示 12 小时制时钟值。最后一行(第 23 行)包含文字“T”以分离格式中的日期部分和时间部分。

不含世纪 (yy)含世纪 (yyyy)标准输出
- character 页大小n
1 0 或 100 缺省值mon dd yyyy hh:mm AM(或 PM)
2 2 SQL 标准yy.mm.dd
3103 英语/法语dd/mm/yy
4 104 德语dd.mm.yy
5 105 dd-mm-yy
6106 dd mon yy
7107 mon dd, yy
8108 HH:mm:ss
-9 或 109 缺省值 + 毫秒mon dd yyyy hh:mm:ss AM(或 PM)
10110 美国mm-dd-yy
11111 日本yy/mm/dd
12112 ISO yymmdd
13113 yy/dd/mm
14114 mm/yy/dd
14114 hh:mi:ss:mmmAM(或 PM)
15115 dd/yy/mm
-16或116 mon dd yyyy HH:mm:ss
17117 hh:mmAM
18118 HH:mm
19 hh:mm:ss:zzzAM
20 hh:mm:ss:zzz
21 yy/mm/dd HH:mm:ss
22 yy/mm/dd HH:mm AM (或 PM)
23 yyyy-mm-ddTHH:mm:ss

SAP ASE日期转换(常用)




· 取时间的某一个部分

select datepart(yy,getdate()) --year
select datepart(mm,getdate()) --month
select datepart(dd,getdate()) --day
select datepart(hh,getdate()) --hour
select datepart(mi,getdate()) --min
select datepart(ss,getdate()) --sec

· 取星期几

set datefirst 1
select datepart(weekday,getdate())     --weekday

· 取整数

select convert(int,convert(char(10),getdate(),112))     -- 20031112
select datepart(hh,getdate())*10000 + datepart(mi,getdate())*100 + datepart(ss,getdate())    -- 110646

· 转换为字符串

select getdate() -- '10/11/12'
select convert(char,getdate(),101) -- '09/27/2010'
select convert(char,getdate(),102) -- '2010.11.12'
select convert(char,getdate(),103) -- '27/09/2010'
select convert(char,getdate(),104) -- '27.09.2010'
select convert(char,getdate(),105) -- '27-09-2010'
select convert(char,getdate(),106) -- '27 Sep 2010'
select convert(char,getdate(),107) --'Sep 27, 2010'
select convert(char,getdate(),108) --'11:16:06'
select convert(char,getdate(),109) --'Sep 27 2010 11:16:28:746AM'
select convert(char,getdate(),110) --'09-27-2010'
select convert(char,getdate(),111) --'2010/09/27'
select convert(char,getdate(),112) --'20100927'
select rtrim(convert(char,getdate(),102))+' '+(convert(char,getdate(),108)) -- '2010.11.12 11:03:41'

SAP ASE用户定义的数据类型




用户定义的数据类型建立在系统数据类型以及用户定义的 sysname 或longsysname 数据类型基础之上。在创建了用户定义的数据类型后,可以使用它来定义列、参数和变量。根据用户定义的数据类型创建的对象将继承该用户定义的数据类型的规则、缺省值、空值类型和 IDENTITY 属性,并会继承该用户定义的数据类型所基于的系统数据类型的缺省值和 NULL 值类型。

用户定义的数据类型必须在要使用它的每一个数据库中创建。在 model数据库中创建常用类型。在创建每一个新数据库时,这些类型会被自动添加到其中(包括用于临时表的 tempdb)。

Adaptive Server 允许基于任一系统数据类型,使用 sp_addtype 创建用户定义的数据类型。您不能基于另一用户定义的数据类型(例如,pubs2 数据库中的 timestamp 或 tid 数据类型)创建用户定义的数据类型。

但 sysname 和 longsysname 数据类型不在此例。尽管 sysname 和 longsysname 是用户定义的数据类型,仍然可以使用它们创建用户定义的数据类型。

用户定义的数据类型是数据库对象。它们的名称是区分大小写的,而且必须符合标识符的规则。

您可以使用 sp_bindrule 将规则绑定到用户定义的数据类型并使用sp_bindefault 绑定缺省值。

缺省情况下,基于用户定义的数据类型建立的对象继承用户定义的数据类型的空值类型或 IDENTITY 属性。您可以覆盖列定义中的空值类型或 IDENTITY 属性。

使用 sp_rename 可重命名用户定义的数据类型。

使用 sp_droptype 可将用户定义的数据类型从数据库中删除。不能删除已经在表中使用的数据类型。

使用 sp_help 可显示有关系统数据类型或用户定义的数据类型的属性的信息。也可以使用 sp_help 来显示表中每一列的数据类型、长度、精度和标度。


数据类型和加密列




下表列出了部分加密列的受支持数据类型以及受支持数据类型的加密列在磁盘上的长度。更多数据请参阅官方网站www.sap.com

加密列类型: varbinary

数据类型输入数据长度最大加密数据长度(无init_vector)实际加密数据长度(无init_vector)最大加密数据长度(有init_vector)实际加密数据长度(有init_vector)
date4 1717 3333
time4 1717 3333
smalldatetime4 1717 3333
bigdatetime8 1717 3333
bigtime8 1717 3333
datetime8 1717 3333
smallmoney4 1717 3333
money8 1717 3333
bit8 1717 3333
bigint8 1717 3333
unsigned bigint8 1717 3333
unichar(10)2 (1 个unichar字符) 3317 4933
unichar(10)20 (10 个unichar字符) 3333 4949
univarchar(20)20 (10 个unichar字符) 4933 6349