SAP ASE 数据类型
(本部分内容,DBA了解即可)
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 则不会。 |
· 精确数值:整数
数据类型种类 | 同义词 | 范围 | 存储的字节数 |
---|---|---|---|
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.3648 | 4 | |
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 | |
datetime | 1753 年 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 PM | 8 | |
bigtime | 12:00:00.000000 AM 至 11:59:59.999999 PM | 8 | |
· 字符
数据类型种类 | 同义词 | 范围 | 存储的字节数 |
---|---|---|---|
char(n) | character | 页大小 | n |
varchar(n) | character varying、char varying | 页大小 | 实际条目长度 |
unichar | Unicode 字符 | 页大小 | n * @@unicharsize(@@unicharsize 等于 2) |
univarchar | Unicode 字符 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 |
3 | 103 | 英语/法语 | dd/mm/yy |
4 | 104 | 德语 | dd.mm.yy |
5 | 105 | dd-mm-yy | |
6 | 106 | dd mon yy | |
7 | 107 | mon dd, yy | |
8 | 108 | HH:mm:ss | |
- | 9 或 109 | 缺省值 + 毫秒 | mon dd yyyy hh:mm:ss AM(或 PM) |
10 | 110 | 美国 | mm-dd-yy |
11 | 111 | 日本 | yy/mm/dd |
12 | 112 | ISO | yymmdd |
13 | 113 | yy/dd/mm | |
14 | 114 | mm/yy/dd | |
14 | 114 | hh:mi:ss:mmmAM(或 PM) | |
15 | 115 | dd/yy/mm | |
- | 16或116 | mon dd yyyy HH:mm:ss | |
17 | 117 | hh:mmAM | |
18 | 118 | 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 |
· 取时间的某一个部分
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'
用户定义的数据类型建立在系统数据类型以及用户定义的 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) |
---|---|---|---|---|---|
date | 4 | 17 | 17 | 33 | 33 |
time | 4 | 17 | 17 | 33 | 33 |
smalldatetime | 4 | 17 | 17 | 33 | 33 |
bigdatetime | 8 | 17 | 17 | 33 | 33 |
bigtime | 8 | 17 | 17 | 33 | 33 |
datetime | 8 | 17 | 17 | 33 | 33 |
smallmoney | 4 | 17 | 17 | 33 | 33 |
money | 8 | 17 | 17 | 33 | 33 |
bit | 8 | 17 | 17 | 33 | 33 |
bigint | 8 | 17 | 17 | 33 | 33 |
unsigned bigint | 8 | 17 | 17 | 33 | 33 |
unichar(10) | 2 (1 个unichar字符) | 33 | 17 | 49 | 33 |
unichar(10) | 20 (10 个unichar字符) | 33 | 33 | 49 | 49 |
univarchar(20) | 20 (10 个unichar字符) | 49 | 33 | 63 | 49 |