http://wang-z-p2007.iteye.com/blog/1199142
SYbase函数学习(一)
ASCII 返回表达式中第一个字符的ASCII代码。
如:select ASCII(‘Bennet’) 结果:66
select ASCII(‘B’) 结果:66
avg 返回所有(不同)值的数字平均值 avg([all | distinct ] expression),其中all为缺省值,表示全部;distinct是在应用avg之前取消重复值。Distinct是可选。当应用于group by子句时,集合函数将为每个组(而非整个表)生成一个值。
eg :将titles表按出版商分组,并且只包括那些预付款总额超过25000且书籍平均价格高于15的出版商所形成的组。
select id ,sum(advance) , avg(price) from titles
group by id
having sum(advance) > 25000 and avg(price) >15
having与where类似,可用来决定选择哪个记录。在使用group by对这些记录分组后,having会决定应显示的记录。
char 返回整数的等值字符。他将单字节整数值转换为字符值(char通常用作ASCII的倒数)
charindex 返回表示表达式起始位置的整数。
返回表company的列address中‘start’的起始位置。
eg:select charindex(“start”,address) from company where company_id = 57
char_length 返回表达式中字符的数量。对于可变长度的列和变量,它将返回字符的个数(包括尾部的空格);对于文字和固定长度的字符列和变量,就是声明的长度。所以一般我们要求字符串的长度,最后不要用这个。
col_length 返回已定义的列的长度。如:返回表tablename 的title列的长度,select col_length(‘tablename’,’title’)
注意:对text和image,numeric列比较特殊。
col_name 返回已指定ID和列ID的列的名称,通俗点就是得到列名。
SYbase函数学习(二)
1.compare 直接比较两个字符串,如果不一样,则返回-1
2.convert 数据类型转换函数,如:convert(varchar(20),title)
3.count 返回非空值的数量或选定的行数。count([all|distinct] expression)
其中distinct是在应用count前取消重复值。
eg:查找作者居住的不同城市的数量:
select count(distinct city) from authors
eg:列出titles表中的类型,但取消只包含一本书或不包含任何书的类型:
select type from titles group by type having count(*)>1
count(*)是返回行数,用的最多。
4.current_date() 返回当前日期(不包括小时)。
eg: select current_date()
eg: 用datename标识当前日期
select datename(month,current_date())
结果:August
注意:结果不是8
eg:用datepart标识当前日期
select datepart(month,current_date())
结果:8
5.current_time() 返回当前时间
eg: select current_time()
eg: 返回当前时间的分钟
select datename(minute,current_time())
6.curunreservedpas 返回指定磁盘区段中的可用页数
Curunreservedpgs(dbid,istart,unreservedpgs)
dbid是数据库的ID,它们存储在sysdatabases的dbid字段。
Istart是要返回的页所在磁盘区段中的一页。
Unreservedpgs是在dbtable当前对于所请求的数据库不可用时返回的缺省值。
eg: 返回数据库名称、设备名和每个设备区段中的未保留页数。
select db_name(dbid),d.name ,curunreservedpgs(dbid,1,unreservedpgs)
from sysusages u ,sysdevices d where d.low <=u.size+vstart
and d.high>=u.size+vstart - 1
and d.status &2 = 2
eg:显示从sysusages.istart开始的dbid段上的可用页数;
select curunreservedpgs(dbid, sysusages.istart,0)
实例化:select curunreservedpgs(6,1,0)
SYbase函数学习(三)
1.datalength 返回指定列或字符串的实际长度(以字节表示)
select datalength('a11中国') 结果为7
select datalength('a11 ') 结果为3
注意:结果是以字节表示
2.dateadd 返回向指定日期添加给定数量的年、季度、小时或其它分量后所得的日期分量后所得的日期。
Dateadd(date_part,integer, date expression)
如:titles表中所有书的出版日期推迟21天
Select newpubdate = dateadd(day,21,pubdate) from titles
向日期前添加一天
Select dateadd(dd,1,”apr 12,9999”)
向时间添加5分钟
Select dateadd(mi,5,convert(time,”14:20:00”))
Select dateadd(hh,23,”4/1/1979”)
3.datediff 返回两个日期之间的差值。
这个日期的差值可能是小时,天,年等。
4.datename 以字符串的形式返回指定date或time的指定部分。
Select datename(month,getdate()) 结果November
5.datapart 以整数的形式返回指定date的指定部分。
Select datapart (month,getdate()) 结果 4
6.day 返回指定日期的datepart中表示天的整数
Select day(‘11/02/03’) 结果 2
7.db_id 返回数据库的ID号
Select db_id(‘pub’) 返回pub数据库的id
Select db_id() 当前数据库的ID
SYbase函数学习(四)
1. db_name 返回指定数据库的名称
它和db_id正好相反
例如:select db_name() 当前数据库的名称
Select db_name(4) ID为4的数据库的名称
2.floor 返回小于或等于指定值的最大整数
例如:select floor(123.24) 结果:123
Select floor(-123.24) 结果:-124
Select floor($123.45) 结果:123.00
注意:对于数字和小数表达式,其结果的精度与该表达式的精度相同,标度为0
3. getdate 返回当前系统日期和时间
例如:select getdate() 结果:当前日期,包括日期和时间
Select datepart(month,getdate()) 结果:12
Select datename(month,getdate()) 结果:December
4.host_id 返回当前Adaptive Server客户端机操作系统进程ID,
host_name 返回当前Adaptive Server客户端机操作系统进程名称
例如:select host_name(),host_id()
结果:ylzhang,1365
Ylzhang是计算机名,1365是Adaptive Server客户端进程的进程ID
5.identity_burn_max 跟踪给定表的identity burn最大值,此函数只返还只而不进行更新。
例如:select identity_burn_max(‘tablename’)
注意:返回的是自增列的最大ID,如果这个表没有自增列,则返回为null
6.index_col 返回指定表或视图中带索引的列的名称。
7.index_clolrder 返回列的顺序
8.isnull 当expression求值为null时,用expression中的值替代它。
例如:select isnull(name,’zhang’) from titles 结果:name列为null值的替换为zhang
9.is_sec_service_on 安全服务启用时返回1;否则返回0
is_sec_service_on(sevurity_service_nm)
其中:sevurity_service_nm是安全服务的名称。
查找安全服务的有效名称,用select * from syssecmechs
例如:select is_sec_service_on(“unifiedlogin”)
10.left 返回字符串最左侧指定数目的字符。
left(character_expression,integer_expression)
例如:select left(‘123456789’,5) 结果:12345
select left(‘123 456789’,5) 结果:123 4
返回名字的前5个字符,select left(name,5) from user
11.len 返回指定字符串表达式(不包括尾随空白)的字符数(而不是字节数)
len(string_expression)
例如:select len(‘中国’) 结果:2
注意: char_length,char,len之间的区别
12.lower 返回指定表达式的等值小写表达式(就是把大写字符变成小写)
例如:select lower(‘12FEC张’) 结果:12fec张
13.ltrim 返回指定的表达式,其中删去了前导空白。
例如:select ltrim(‘ aa’) 结果:aa
select ltrim(‘aa ’)+’cc’ 结果:aa cc
select ltrim(‘a a’) 结果: a a
注意:只删去了前导空白
14.max 和 min 返回列中最大值和最小值
例如:select max(price) from computer
select min(price) from computer
15.month 返回一个整数,该整数表示月份。
例如:select month(getdate()) 结果:12
同理: select day(getdate()) 结果:15
select year(getdate()) 结果:2006
16.mut_excl_roles 返回有关两个角色之间互斥性的信息。
mut_excl_roles是一个系统函数。如果系统安全员将role1定义为与role2互斥的角色,或直接有role2所包含的角色,则mut_excl_roles返回1,如果不是则返回0。
17.newid 根据提供的参数生成两种不同格式的、人工可读的全局唯一ID
Newid([optionflag])
例如:select newid()
select newid(0)
select newid(0x0)
select newid(1)
可以通过newid()来参数随机器数
Select id from tablename order by newid()
这时你会发现,每次执行,排序都不一样。
18. next_identity 检查下一个insert可用的下一个标识值。(就是下一个自增的ID)
Next_identity(tablename)
例如:select next_identity(‘tbl_zone’) 结果:返回tbl_zone表中下一个要自增的id
注意:如果这个表不是自增,则返回null
19.object_id 返回指定对象的对象ID,object_name是返回对象ID的对象名称。
Obeject_di(object_name)
object_name是数据库对象(表、视图、过程、触发器、缺省值或规则)的名称。
例如:select object_id(‘TBL_ZONE’) 结果:437573566
同样 select object_name(437573566) 结果:TBL_ZONE
注意:对象ID存储在sysobjects的ID列中。
<script type="text/javascript"></script>
1.pi 返回常量3.1415926535897936。
例如:select pi()
注意:一般计算圆的时候用。
2.power 返回求指定数字的给定次幂所得的值。
Power(value,power)
例如:select power(2,4) 结果:16
select power(3,0) 结果:1
3.proc_role 返回关于是否已授予用户指定角色的信息。(通俗点就是你登陆后看看你是否有某些角色,有则返回1,否则返回0)
例如:检查用户是否已被授予系统安全员角色:
Select proc_role(‘sso_role’)
检查用户是否已被授予系统安全员角色:
Select proc_role(‘oper_role’)
4.rand 返回0-1之间的随机值,该值是使用指定的源值来生成的。
例如:select rand()
5.replicate 返回将指定表达式重复特定次数所形成的字符串。
Replicate(char_expr|uchar_expr,integer_expr)
例如:select replicate(‘ab’,3) 结果:ababab
6.reverse 返回其字符逆转排列的指定字符串。
Reverse(expression|uchar_expr)
例如:select reverse(‘我的电脑’) 结果:脑电的我
7.right 返回表达式最右边具有指定字符数的部分。
Right(expression,integer_expr)
例如:select right(‘abcdefj’,3) 结果:efj
8.role_contain 当role2包含role1是返回1
role_contain(‘role1’,’role2’)
9.role_id 返回已指定名称的角色的系统角色ID
role_name 返回已指定系统角色ID的角色名称
role_id(‘role_name’)
role_ name’(role_id)
例如:返还sa_role的系统角色ID
Select role_id(‘sa_role’) 结果:0
Select role_name(0) 结果:sa_role
10.round 返回指定数字舍入到给定的小数位后所得的值。
round(number,integer)
例如:select round(123.4545,2) 结果:123.4500
Select round(123.45,-2) 结果:100.00
Select round(123.506,2) 结果:123.510
注意:如果integer为负数且超过number的有效数,则为0
11.rtrim 返回删去尾随空白的指定表达式。
Select rtrim(char_expr|uchar_expr)
例如:select rtrim(‘ aa’) 结果: aa
select rtrim(‘ aa ’) 结果: aa
select rtrim(‘a a ’) 结果:a a
注意:它只删去末尾的空白,其他的不会删去
12.show_role 显示登陆的当前启用的角色。
例如:select show_role()
13.show_sec_services 列出可供会话使用的安全服务。
例如:select show_sec_services()
注意:如果没有,则为null
14.sign 返回指定值的符号:+1(正)、0或-1(负)
Sign(numeric)
例如:select sign(123) 结果:1
select sign(0) 结果:0
select sign(-123) 结果:-1
15.sin返回指定角的正弦。
例如:select sin(45)
16.space 返回由指定数量的单字节空格所组成的字符串。
Space
例如:select “aa”+space(5)+”dd” 结果:aa dd
17.square 返回表示为float的指定值的平方值。
Square(numeric)
例如:select square(price) from titles
Select square(5) 结果:25.0
注意:次函数等同于power(muneric_expr,2),但是它返回float类型而不返回int类型。
18.sqrt 返回指定数字的平方根。
例如:select sqrt(100) 结果:10
1.str 返回指定数字的等值字符。
Str(approx_numeic[,length[,decimal]]).
例如:select str(125.36 , 5,2) 结果为125.3
125.36是数字
5是位数,小数点也算
2是小数点后面的位数,默认为0
注意:位数和小数点后面的位数的规律,试试就明白了。
2.str_replace 将第一个字符串表达式中出现的第二个字符串表达式的所有实例替换为第三个表达式。
例如:select str_replace(‘aaabbbccc’,’bb’,’mm’) 结果:aaammbccc
3.stuff 返回通过以下方法形成的字符串:从一个字符串中删除指定数量的字符,然后将这些字符替换为另一个字符串。
例如:select stuff(‘abcdefg’,2,3,’mm’) 结果:ammefg
2 是开始删除字符的位置
3是删除字符数
mm是替代
如:select stuff(‘ssssss’,2,3,null)
select stuff(‘ssssss’,2,3,’’)
4.substring 截取字符串中的一部分.
Substring(expression,start,length)
例如: select substring(‘abcdef’,1,3) 结果:abc
5.sum 返回值的总和
Sum([all|distinct] expression)
注意: distinct在这里的用法
6.suser_id 从syslogins表中返回服务器用户的ID号
suser_name 从syslogins表中返回服务器用户的名称
Suser_id([server_user_name])
例如:select suser_id()
或 select suser_id(‘lei’)
select suser_name()
或 select suser_name(4)
7.syb_quit 终止连接.
例如:终止在其中执行该函数且返回错误消息的连接.
Select syb_quit()
8.tempdb_id 报告给定会话分配到的临时数据库.
9.upper 返回指定字符串的等值大写字符串.
例如:select upper(‘ab’) 结果: AB
10.used_pgs 返回表或索引所用的页数.
11.user 返回当前用户的名称.
例如:select user 结果:dbo
12.user_id 返回数据库中指定用户或当前用户的ID号
user_name 返回数据库中指定用户或当前用户的名称.
例如:select user_id()
或select user_id(‘lei’)
或select user_name()
或select user_name(4)
13.valid_name 如果指定字符串不是有效标识符,则返回0,否则返回非0数字
14.vaild_user 看是否是一个数据库中的有效用户或别名.
例如:select valid_user(4)
15.year 返回年
例如:select year(‘12/20/2006’) 结果:2006
1.将两个字符串并置,用+
例如:select '神秘'+'狭' 结果:神秘狭
2.between……and 查询两个值之间的数字.
例如: ……where column1 between 5 and 100
3.1+null 结果:null
4.expression is null等效expression=null
expression is not null等效expression!=null
5.要让一个字符串延续到屏幕的下一行,可用\
6.临时表以#开头.
例如:create table #zone(zone_id int)
7.如果是关键字,就不能用于表名或列名,必须用分隔标识符(加双引号)才能插入.在创建或引用分隔标识符之前,必须执行set quoted_identitfier on
例如: set quoted_identitfier on
Create table “time”(“id” int)
set quoted_identitfier off
8.database.ower.table_name.column_name(数据库名称.所有者名称.表名称.列名称),
也可以database..table_name
9.确定标识符是否有效:select valid_name(“object_name”)
10.使用sp_rename重命名用户对象.
11.like 匹配,not like 是不匹配
例如: ….where like “415%”
使用通配符
12.% 任何包含0或者多个字符的字符串
例如:查询以568开头的电话号码
Select number from authors where number like ‘568%’
13._ 任何单个字符
例如:查询以”zhang”结尾的六个字母的姓名
Select name from users where name like “_zhang”
14.[] 指定范围或集合内的任何单个字符
例如:查询以”zhang”结尾并以M和Z间的任意单个字符开头的姓名
Select name from users where like “[M-Z]inger”
查询”zhang”和”Zhang”的姓名
Select name from users where name like “[Zz]hang”
15.[^] 不在指定范围或集合内的任何单个字符
例如:返回以zhang开头且后面一个字符不是y的姓名
Select name from users where name like “zhang[^y]%”
16.escape子句作为转义字符.
例如:like ”6@%” escape”@” 表示6%
1.alter database 增加分配给数据库的控件量
alter database mydb on mydate =50 --(在数据库设备mydb 上加50m数据空间,)
log on mylog=10 --(在数据库设备mylog上加10m日志空间,)
2.alter role 定义角色之间的互斥关系;为角色添加,删除和更改口令;指定口令有效期,最小口令长度以及知道角色允许的最大登陆尝试失败次数.
例子1:将intern_role和specialist_role定义为互斥:
alter role specialist_role add exclusive membership intern_role
例子2:在成员资格级别和激活级别将角色定义为互斥
alter role specialist_role add exclusive membership intern_role
alter role intern_roleadd add exclusive activation surgeon_role
例子3:添加口令到现有的角色
alter role doctor_role add password “zhang”
例子4:从现有角色删除口令
alter role doctor_role drop password
例子5:锁定角色physician_role
alter role physician_role lock
例子6:解锁角色physician_role
alter role physician_role unlock
例子7:将physician_role允许的最大登陆尝试失败次数改为5
alter role physician_role set max failed_logins 5
例子8:将现有角色physician_role的最短口令长度设置为5个字符
alter role physician_role set min password length 5
例子9:替换所有角色的最短口令长度
alter role “all overrides” set min password length-1
例子10 删除所有角色的最大登陆失败次数的替换值
alter role “all overrides” set max password length-1
注意:一般为角色更改口令,请先删除口令,在添加口令.
3.alter table 向表添加新列;删除或修改现在的列;添加,更改或删除约束;更改现有表的属性;启用或禁用表上的触发器;
例子1:向表中添加一列
alter table tablename add manager_name varchar(50) null
例子2:向表中添加identity列
alter table tablename add user_id numeric(19,0) identity
例子3 向表中添加主键约束.
alter table autors add constraint au_identification primary key(au_id,au_lname,au_fname)
例子4 在authors表上创建索引,设置reservepagegap值为16,在索引中为每15个分配的页留一个空白页
alter table authors
add constraint au_identification
primary key(au_id,au_lname,au_fname)
with reservepagegap=16
例子5 删除au_identification约束
alter table tablename
drop constraint au_identification
例子6 删除authors表中phone列的缺省约束.如果列允许为空值,则没有指定值时会插入空值.如果列不允许空值,则不指定列的插入,操作将失败
alter table authors
replace phone default null
例子7:为表创建4个新的页链.将表分区后,现有的数据会保存在第一个分区,但是新的行会插入到所有这5个分区中
alter table tablename partition 5
例子8 并置表的所有页链,然后将其重新分区为6个分区
alter table tablename unpartition
alter table tablename partition 6
例子9 将tablename表的锁定方案更改为数据行锁定
alter table tablename lock datarows
例子10 将非空列author_type 添加到缺省值为primary_author的authors表
alter table authors
add author_type varchar(20)
default “primary_author” not null
例子11 从表中删除列
alter table tablename
drop id,name
例子12 将表authors的city列修改为默认值为空值的varchar(30)
alter table authors
modify city varchar(30) null
例子13 将stores表中的name列修改为非空.
alter table stores
modify name not null
例子14 修改titles表的type列,并将titles表的锁定方案从所有页锁定更改为数据行锁定
alter table titles
modify type varchar(10)
lock datarows
例子15 将titles表的notes列由varchar(50),将缺省值由空更改为非空,并知道exp_row_size值为40
alter table titles
modify notes varhcar(50) not null
with exp_row_size=40
例子16 添加,修改和删除一列,然后在同一查询中添加另一列.改变锁定方案,并指定新列的exp_row_size值.
alter table titles
modify city varhcar(50) null
drop notes
add sec_advance money default 1000 not null
lock datarows
with exp_row_size=40
1.begin…..end 包含一系列SQL语句,以使控制语言可以影响整个组的性能.
例如: if(select avg(number) frim zone)<18
Begin
…………..
………….
………..
end
2.begin transaction 标记用户定义的事务的起点.
例如:为insert语句显示的开始一个事务
Begin transaction
Insert into publishers(pub_id) values(“445”)
Commint transaction --关闭事务
注意:要取消所有或部分事务,请使用rollback命令.rollback命令必须出现在事务内;不能在提交事务后在回退事务.
3.break 导致从while循环中退出.
例如: while aa>12
Begin
…………
If bb>5
Break
Else
Continue
End
注意: Break是中断while,而continue是中断本次循环.
4.case 可以用于任何可以使用值表达式的情况.
例子1:把表查询结果中name为C的改为fff
SELECT id ,
case
when name='C'
then 'fff'
else name
end
from A
注意: end不能忘, else name如果不要,其他的name都为null了
5.close 使游标失效
例子: close cursor_name
6.coalesce 它的作用和isnull一样
Coalesce(expression,expression1[,expression1]….)
例子: select id ,coalesce(name,yun,'dddd'),isnull(name,'yun') from A
说明:字段name为null,就用yun的字段代替,如果yun的字段也为null,用’ddd’代替
7.create database 创建数据库
Create database mydb on mydate =50 --(在数据库设备mydb 上加50M数据空间,)
log on mylog=10 --(在数据库设备mylog上加10M日志空间,)
8.create default 创建默认值,如果插入时没有显示地提供要插入列中的值,则指定一个值.
例子1;定义一个缺省值,绑定在列中
Create defulat phonedflt as “unknown”
Sp_bindefault phonedflt , “authors.phone”
1.create function 通过将SQL包装加入到JAVA静态方法中,创建用户定义的函数.可返回一由该方法定义的值.
2.create index 创建表中一个或多个列的索引.
例子1.在authors表的au_id列上创建名为au_id_ind的索引:
Create index au_id_ind on authors(au_id)
例子2.在authors表的au_id列上创建名为au_id_ind的唯一聚族索引:
Create unique clustered index au_id_ind on authors(au_id)
例子3 在authors表的au_id和title_id列上创建名为ind1的索引
Create index ind1 on authors (au_id, title_id)
3.create plan 创建抽象计划
例子 为指定查询创建抽象计划.
Create plan “select * from titles ” “(t_scan titles)”
4.create procedure 创建存储过程或可以带一个或多个用户提供的参数的扩展存储过程.
例子
create procedure showed(@name varchar(100))
as
select * from authors where name=@name
下面是执行showid的可接受的语法形式”
Execute showed titles
或execute showed @name=”tiltes”
5.create role 创建用户定义角色.指定允许用于所创建的特定角色的口令有效期,最小口令长度和最大失败登陆次数.
例子1 创建名为doctor_role的角色
Create role doctor_role
例子2. 创建名为doctor_role且口令为haha的角色
Create role doctor_role with passwd “haha”
例子3 设置intern_role的有效期
Create role intern_role , with passwd “haha”, passwd ecpiration 6
例子4 设置intern_role的最大失败登陆次数
Create role intern_role , with passwd “haha”, max failed_logins 20
例子5 设置intern_role的最短口令长度
Create role intern_role , with passwd “haha”, min passwd length 0
6.create rule 为特定列或属于用户定义数据的任意列指定可接受值的域并创建访问规则.
例子1 创建一个名为limit的规则,该规则限制advance的值小于1000
Create rule linit
As @advance <1000
例子2 创建名为pubid_rule的规则,该规则限制pub_id的值为13,14或15
Create rule pubid_rule
As @pub_id in (‘13’,’14’,’15’)
1.disk mirror 创建在主设备发生故障时立即接替运行得软件镜像。
2.disk refit 通过sysdevices中的信息重建master数据库的sysusages和sysdatabases系统表
3.disk reinit 重建master数据库的sysdevices系统表。将disk reinit作为过程的一部分使用,以便恢复master数据库。
4.disk remirror 在磁盘镜像因镜像设备故障而停止或者被disk unmirror命令临时禁用后重新启动它。
5.disk resize 动态添加Adaptive Server使用的设备的大小。
例子:disk resize
Name = “test_dev”
Size = “10M”
6.disk unmirror 挂起用disk mirror命令启动的磁盘镜像,以允许硬件维护或硬件设备的更改。
7.drop database 删除一个或多个数据库。
8.drop default 删除用户定义的缺省值。
例子 :删除数据库中用户定义的缺省datedefault
Drop default datedefault
9.drop function 删除SQL函数
10.drop index 从当前数据库的表中删除索引。
例子:从authors表中删除au_id_ind
Drop index authors. au_id_ind
11.drop procedure 删除存储过程。
例子:删除存储过程shoind
Drop procedure shoind
12.drop role删除用户定义角色
13.drop rule 删除用户定义的规则。
14.drop table 从数据库中删除表定义及其所有的数据、索引、触发器和权限。
15.drop trigger 删除触发器。
16.drop view 从当前数据库中删除一个或多个视图。