存档

文章标签 ‘ASE’,文章数:63

  目前在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语句:

  1. 如何判断一个表是否是分区表?

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相同的功能,仅仅多了一列:列序号。

效果图如下:

实现类似oracle的sqlplus中desc想类似功能的sp_desc存储过程

 

存储过程sp_desc的语法如下: