存档
目前在ASE 15中支持简体中文字符的字符集有四种:CP936,EUCGB,UTF-8和GB18030。
其中EUCGB字符集是基于GB2312-80编码规范的,它的EUC (Extended Unix Code)编码范围是第一字节0xA1~0xFE(实际只用到0xF7),第二字节0xA1~0xFE。
CP936字符集是基于GBK编码规范(实际上的国家标准是GB13000-90),是对GB2312进行的扩展,第一字节为0x81~0xFE,第二字节分两部分,一是0x40~0x7E,二是0x80~0xFE。其中和GB2312相 同的区域,字完全相同。
GB18030字符集(国家标准号是GB18030-2000)是2000年3月17日发布的新的中文编码标准。它是GB2312的扩充,采用单/双 /四字节编码体系结构,收录了27000多个汉字以及臧文、蒙文、维吾尔文等主要的少数民族文字。Sybase 从ASE 12.5.0.3之后开始支持 GB18030字符集。
UTF-8字符集是现有ASCII系统向Unicode转换的一个过渡方案。它使用1-3字节表示一个字符。简体中文的每个字符在utf8中的长度基本上都是3个字节。它的最主要的优点是可以同时支持超过650种语言的字符。缺点是针对中文字符来说,需要增加50%的空间用来存储。还有一个问题是执行sp_helptext显示存储过程体的时候,有可能出现半个汉字。
一般来说,由于 EUCGB不支持国标一、二级字库以外的汉字,所以我们推荐用户在服务器端和客户端都使用CP936字符集,或者在ASE 12.5.0.3之后还可以使用GB18030字符集,它可以支持一些比较生僻的汉字。它的不足是只有一种排序方式,即区分大小写的Binary方式。所以,如果需要使用支持中文字符集且不区分大小写的数据库时,就只能使用UTF-8作为服务器端字符集,而客户端使用CP936或GB18030字符集。
eucgb、cp836、gb18030仅支持区分大小写的排序顺序,utf-8支持不区分大小写的排序。
以YYYYMMDDHHMMSS的格式显示日期的SQL语句为:
其中日期部分:convert(varchar,getdate(),112)
时间部分为:convert(varchar,getdate(),108)
需要将时间部分的:16:18:45里的冒号去掉。使用函数:str_replace,将冒号去掉,注意是NULL而不是空字符。
1> select str_replace(convert(varchar,getdate(),108),':',NULL)
2> go------------------------------
162014
完整的SQL语句为:
str_replace(convert(varchar,getdate(),112) + convert(varchar,getdate(),108) , ':',NULL)
ASE自15.0后增加了3中语义分区:hash、range、list。默认的轮询分区(roundrobin)为非语义分区,是为了兼容15.0之前的版本而设计的。
语义分区表的分区信息主要存储在:syspartitions和syspartitionkeys这两张表中。
查看表的分区信息可以使用系统自带的存储过程:sp_helpartition
本文提供3个SQL语句:
-
如何判断一个表是否是分区表?
select count(*) from dbo.syspartitionkeys where id=object_id(table_name)
示例:
1> if exists(select 1 from dbo.syspartitionkeys where id = object_id("PART_RESDISK"))
2> print "table PART_RESDISK exists!"
3> else
4> print "table PART_RESDISK not exists!"
5> go
table PART_RESDISK exists!
ASE15.0中的表默认为roundrobin类型的"分区表",系统表syspartitionkeys表中仅仅记录语义分区表的分区键信息。
利用前面介绍的用Sybase Central连接ASE数据库的方法
用Sybase Central连接Sybase ASE数据库 https://www.dbainfo.net/connnect-to-sybase-ase-by-sybase-central-client-tool.htm
成功连接上数据库后,会显示如下的窗口。
如果左边窗口中没有显示如图所示的文件夹列表,那么需要选择菜单视图下的文件夹菜单
Sybase ASE15.0.3客户端的安装介质和其它一些客户端组件(比如:PowerDesigner,PowerTransfer,InfoMaker等)一起被放置在一张光盘中。使用光盘或者将ASE客户端拷贝到硬盘上进行安装。下图是客户端介质光盘的目录列表。
windows下的Sybase ASE客户端可以安装在32位和64位的平台上,分别对应目录下的pcclient32和pcclient64目录。
ASE 15.0.3 客户端 32位和64位下载地址:ase1503_client_win32_2.zip
本文档演示在windows XP SP3环境上安装Sybase ASE客户端。进入目录pcclient32,有setup.exe 和 setupConsole.exe两个文件。
双击setupConsole.exe进行Sybase ASE客户端的安装过程
Oracle中查询月底那天的日期的函数为:last_day()。 在ASE中没有对应的函数,在Oracle移植到Sybase的时候,需要手动编写函数来实现,幸亏ASE15.0.2后开始支持自定义函数。
下面提供3种实现查询本月最后一天的日期的SQL语句:
第一种:
select dateadd(dd,-1,convert(char(8),(datepart(yy,dateadd(mm,1,getdate()))*10000+datepart(mm,dateadd(mm,1,getdate()))*100+01)))
go
将本月的下一个月的年份和月份提取出来,以数字的形式相加,然后转化成类似YYYYMMDD的这种日期格式。最后直接取下个月的第一天的前一天即可。在ASE中字符串 '20110101' 和 convert(datetime,'20110101') 是相等的。
第二种:
convert函数的style截止到ASE15.0.3有以下的样式!
Date format conversions using the style parameter
Without century (yy) |
With century (yyyy) |
Standard |
Output |
- |
0 or 100 |
Default |
mon dd yyyy hh:mm AM (or PM) |
1 |
101 |
USA |
mm/dd/yy |
2 |
2 |
SQL standard |
yy.mm.dd |
3 |
103 |
English/French |
dd/mm/yy |
4 |
104 |
German |
dd.mm.yy |
5 |
105 |
dd-mm-yy |
|
6 |
106 |
dd mon yy |
|
7 |
107 |
mon dd, yy |
|
8 |
108 |
HH:mm:ss |
|
- |
9 or 109 |
Default + milliseconds |
mon dd yyyy hh:mm:ss AM (or PM) |
10 |
110 |
USA |
mm-dd-yy |
11 |
111 |
Japan |
yy/mm/dd |
12 |
112 |
ISO |
yymmdd |
13 |
113 |
yy/dd/mm |
|
14 |
114 |
mm/yy/dd |
|
14 |
114 |
hh:mi:ss:mmmAM(or PM) |
|
15 |
115 |
dd/yy/mm |
|
- |
16 or 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 (or PM) |
||
23 |
yyyy-mm-ddTHH:mm:ss |
更新:2021-09-23
ASE 16.0 SP02 新增日期时间样式:
Without century (yy) |
With century (yyyy) |
Standard |
Output |
36 | 136 |
<hh:mm:ss.zzzzzz>AM (PM) |
|
37 | 137 |
<hh:mm.ss.zzzzzz> | |
38 |
138 |
<mon dd yyyy hh:mm:ss.zzzzzz>AM (PM) | |
39 |
139 |
<mon dd yyyy hh:mm:ss.zzzzzz> | |
40 |
140 |
<yyyy-mm-dd hh:mm:ss.zzzzzz> |
在oracle的sqlplus中有一个命令:desc,能够简要的显示基表、视图等的结构。desc的显示结果简单明了,比较实用。虽然在Sybase ASE中的存储过程sp_help也能实现查看表结构的目的;但是,显示结果很多尤其换行混乱,让人看得眼花缭乱。显示的存储过程:sp_desc能够实现oracle的sqlplus中desc相同的功能,仅仅多了一列:列序号。
效果图如下:
存储过程sp_desc的语法如下: