blogjava-凯发k8网页登录

blogjava-凯发k8网页登录http://www.blogjava.net/xzclog/category/52003.htmlzh-cntue, 21 aug 2012 08:47:23 gmttue, 21 aug 2012 08:47:23 gmt60sybase 函数http://www.blogjava.net/xzclog/archive/2012/08/21/385918.htmlxzcxzctue, 21 aug 2012 02:49:00 gmthttp://www.blogjava.net/xzclog/archive/2012/08/21/385918.htmlhttp://www.blogjava.net/xzclog/comments/385918.htmlhttp://www.blogjava.net/xzclog/archive/2012/08/21/385918.html#feedback0http://www.blogjava.net/xzclog/comments/commentrss/385918.htmlhttp://www.blogjava.net/xzclog/services/trackbacks/385918.html

sybase 函数

 

sybase字符串函数

长度和语法分析
datalength(char_expr)
在char_expr中返回字符的长度值,忽略尾空
substring(expression,start,length)
返回部分字符串
right(char_expr,int_expr)
返回char_expr右边的int_expr字符
基本字符串运算
upper(char_expr)
把char_expr转换成大写形式
lower(char_expr)
把char_expr转换成小写形式
space(int_expr)
生成有int_expr个空格的字符串
replicate(char_expr,int_expr)
重复char_expr,int_expr次
stuff(expr1,start,length,expr2)
用expr2代替epxr1中start起始长为length的字符串
reverse(char_expr)
反写char_expr中的文本
ltrim(char_expr)
删除头空
rtrim(char_expr)
删除尾空
格式转换
ascii(char_expr)
返回char_expr中第一个字符的ascii值
char(int_expr)
把ascii码转换为字符
str(float_expr[,length[,decimal]])
进行数值型到字符型转换
soundex(char_expr)
返回char_expr的soundex值
difference(char_expr1,char_expr2)
返回表达式soundex值之差
串内搜索
charindex(char_expr,expression)
返回指定char_expr的开始位置,否则为0
patindex("%pattern%",expression)
返回指定样式的开始位置,否则为0
  
datalength
用于确定可变字符串的长度
soundex
用于确定字符串是否发音相似
difference
返回0-4之间的值,0表示最不相似,4表示最相似
通配符
%
匹配任何数量的字符或无字符
_
匹配任何单个字符(空间占位符)
[]
规定有效范围,或某个"or"条件
    [abg]   a,b,g
    [a-c]   a,b,c
    [a-ce-g] a,b,c,e,f,g
    [^abg]
除了a,b,g
    [^a-c]  
除了a,b,c
  
escape
子句
用某个转义字符可在搜索字符串时将通配符作为文字来包含。
ansi-89 sql
标准定义了escape子句指定某个转义字符
缺省情况下,[]来转义某个通配符,例:
select * from test_tab
    where description like " [%]%"
语法:
like char_expression escape escape_character

select * from test_tab
    where description like " #%%" escape "#"
可用于串接字符
select au_laname "," au_fname from authors
  
数学函数
abs(numeric_expr)
返回指定值的绝对值
ceiling(numeric_expr)
返回大于或等于指定值的最小整数
exp(float_expr)
给出指定值的指数值
floor(numeric_expr)
返回小于或等于指定值的最大整数
pi()
返回常数3.1415926
power(numeric_expr,power)
返回numeric_expr的值给power的幂
rand([int_expr])
返回0-1之间的随机浮点数,可指定基值
round(numeric_expr,int_expr)
把数值表达式圆整到int_expr指定的精度
sign(int_expr)
返回正 1,零0或负-1
sqrt(float_expr)
返回指定值的平方根
sql server
支持所有标准的三角函数和其他有用的函数
  
日期函数
getdate()
返回当前的系统日期和时间
datename(datepart,date_expr)
以字符串形式返回date_expr指定部分的值,转换成合适的名字
datepart(datepart,date_expr)
作为整数返回date_expr值的指定部分
datediff(datepart,date_expr1,date_expr2)
返回date_expr2-date_expr1,通过指定的datepart度量
dateadd(datepart,number,date_expr)
返回日期,通过在date_expr上增加指定number的日期部件而产生的
  
datepart
日期部件   缩写   值范围
yy   1753-9999
季度 qq   1-4
mm   1-12
每年中的天   dy   1-366
dd   1-31
星期 wk   1-54
星期天 dw   1-7(1=sunday)
小时 hh   0-23
分钟 mi   0-59
ss   0-59
毫秒 ms   0-999
例:
select invoice_no,
    datediff(dd,date_shipped,getdate())
    from invoices
    where balance_due>0
  
转换函数convert
此函数把值从一种类型改变成另一种类型
convert(datetype [(length)],expression)
select "advance=" convert(char(12),advance)
    from titles

日期转换
convert(datetype[(length)],expression,format)
format
指定将日期转换为什么格式,有以下值:
没有世纪   有世纪 转换字符串中日期格式
    0 or 100   mon dd yyy hh:miam(or pm)
1 101 mm/dd/yy
2 102 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 or 109   mon dd,yyyy hh:mi:ss:mmmam(or pm)
10 110 mm-dd-yy
11 111 yy/mm/dd
12 112 yymmdd
  
系统函数
函数       定义
访问和安全性信息
host_id()      
客户进程的当前主机进程id号
host_name()       
客户进程的当前主计算机名
suser_id(["login_name"])  
用户的sql server id
suser_name([server_user_id])  
用户的sql server登录名
user_id(["name_in_db"])
用户在数据库中的id号
user_name([user_id])
用户在数据库中的名字
user         
用户在数据库中的名字
show_role()       
用户的当前活动角色

数据库和对象信息
db_id(["db_name"]) 数据库id号
db_name([db_id])   
数据库名
object_id("objname")
数据库对象id号
object_name(obj_id])
数据库对象号
col_name(obj_id,col_id)
对象的栏名
col_length("objname","colname")  
栏的长度
index_col("objname",index_id,key#)  
已索引的栏名
valid_name(char_expr)
若char_expr不是有效标识符,则返回0

数据函数
datalength(expression) 按字节返回expression的长度
tsequal(timestamp1,timestamp2)  
比较时戳值,若时戳值不匹配,则返回出错消息
  
isnull()
isnull
函数用指定的值代替查询栏或合计中的空值
例:
select avg(isnull(total_order,$0))
    from invoices

 



xzc 2012-08-21 10:49
]]>
sybase 日期函数http://www.blogjava.net/xzclog/archive/2012/08/21/385919.htmlxzcxzctue, 21 aug 2012 02:49:00 gmthttp://www.blogjava.net/xzclog/archive/2012/08/21/385919.htmlhttp://www.blogjava.net/xzclog/comments/385919.htmlhttp://www.blogjava.net/xzclog/archive/2012/08/21/385919.html#feedback0http://www.blogjava.net/xzclog/comments/commentrss/385919.htmlhttp://www.blogjava.net/xzclog/services/trackbacks/385919.html

日期函数

getdate()

得到当前时间,可以设置得到各种时间格式.

datepart(日期部分,日期)

取指定时间的某一个部分,年月天时分秒.

datediff(日期部分,日期1,日期2)

计算指定的日期1和日期2的时间差多少.

dateadd(日期部分,数值表达式,日期)

计算指定时间,再加上表达式指定的时间长度.

 

--取时间的某一个部分

 

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 getdate() -- '03/11/12'

select convert(char,getdate(),101) -- '09/27/2003'

select convert(char,getdate(),102) -- '2003.11.12'

select convert(char,getdate(),103) -- '27/09/2003'

select convert(char,getdate(),104) -- '27.09.2003'

select convert(char,getdate(),105) -- '27-09-2003'

select convert(char,getdate(),106) -- '27 sep 2003'

select convert(char,getdate(),107) --'sep 27, 2003'

select convert(char,getdate(),108) --'11:16:06'

select convert(char,getdate(),109) --'sep 27 2003 11:16:28:746am'

select convert(char,getdate(),110) --'09-27-2003'

select convert(char,getdate(),111) --'2003/09/27'

select convert(char,getdate(),112) --'20030927'

select rtrim(convert(char,getdate(),102)) ' ' (convert(char,getdate(),108)) -- '2003.11.12 11:03:41'

 

--整数时间

 

select convert(int,convert(char(10),getdate(),112)) -- 20031112

select datepart(hh,getdate())*10000 datepart(mi,getdate())*100 datepart(ss,getdate()) -- 110646

 

--时间格式 "yyyy.mm.dd hh:mi:ss" 转换为 "yyyymmddhhmiss"

 

declare @a datetime,@tmp varchar(20),@tmp1 varchar(20)

select @a=convert(datetime,'2004.08.03 12:12:12')

select @tmp=convert(char(10),@a,112)

select @tmp

select @tmp1=convert(char(10),datepart(hh,@a)*10000 datepart(mi,@a)*100 datepart(ss,@a))

select @tmp1

select @tmp=@tmp @tmp1

select @tmp

 

 

--当月最后一天

 

declare

@tmpstr varchar(10)

@mm int,

@premm int,

@curmmlastday varchar(10)

begin

select @mm=datepart(month,getdate())--当月

select @premm=datepart(month,dateadd(month,-1,getdate())) --上个月

if (@mm>=1 and @mm<=8)

select @tmpstr=convert(char(4),datepart(year,getdate())) '.0' convert(char(1),datepart(month,dateadd(month,1,getdate()))) '.' '01'

else if (@mm>=9 and @mm<=11)

select @tmpstr=convert(char(4),datepart(year,getdate())) '.' convert(char(2),datepart(month,dateadd(month,1,getdate()))) '.' '01'

else

select @tmpstr=convert(char(4),datepart(year,dateadd(year,1,getdate()))) '.0' convert(char(1),datepart(month,dateadd(month,1,getdate()))) '.' '01'

select @curmmlastday=convert(char(10),dateadd(day,-1,@tmpstr),102) --当月最后一天

end

 

源文档 <>

 



xzc 2012-08-21 10:49
]]>
【昆明达内】oralce与sybase iq差异比较及使用心得http://www.blogjava.net/xzclog/archive/2012/06/18/380993.htmlxzcxzcmon, 18 jun 2012 02:57:00 gmthttp://www.blogjava.net/xzclog/archive/2012/06/18/380993.htmlhttp://www.blogjava.net/xzclog/comments/380993.htmlhttp://www.blogjava.net/xzclog/archive/2012/06/18/380993.html#feedback0http://www.blogjava.net/xzclog/comments/commentrss/380993.htmlhttp://www.blogjava.net/xzclog/services/trackbacks/380993.html因为之前使用的是oralce所以在摸索使用用sybase很长一段时间后,总结了一下sybase iq的使用
  
  心得和大家分享,希望对大家会有帮助。
  
  1、字母大小写比对不敏感,也就是在值比对判断时大小写字母都一样;
  2、等值,或<>判断,系统默认对等式两边比对值去右边空格再进行比较;
  3、group by 可以根据select字段或表达式的别名来 汇总,在编写时也尽量避免select 语句的别
  
  名与from表中的字段有重复,不然会出现莫名其妙的错误;
  4、from后的子查询 要定义别名才可使用;
  5、存储过程要返回iq系统错误信息 sqlcode || errormsg(*) :(两者都为exception后第一条sql
  
  语句才有效果);
  6、iq中若采用 full join 连接则不能使用 where 条件,否则full join将失效,要筛选条件则用
  
  子查询先过滤记录后再full join;
  7、建表时,字段默认为非空;
  8、update语句,如果与目标表关联的表有多条,则不会报错,而是随机取一条更新(第一条);
  9、rank() over(partition by .. order by ..) 分组分析函数,相同的order by值,返回顺序值
  
  一样,且partition by 只支持一个字段或一个字段组(需多个字段分组的则要用 || 拼为一个字
  
  段(待确认,该问题以前碰过一次,再次验证却不存在这问题))
  10、返回可读的 全局唯一字符:uuidtostr(newid())
  11、存储过程隐式游标语法:
  for a as b cursor for select ... from ... 
  do
  .... 过程语句
  end for;
  需要注意的时,这边的a 和 b 在 过程语句中都不能引用,所以为避免过程语句其他字段名与for 
  
  select 语句的字段名称重复,for select 语句的字段最好都定义别名区分
  12、根据select 语句建立[临时]表的方法(oracle的create table)为 select ..[*] into [#]
  
  table_name from ..; 其中如果在table_name加前缀#,则为会话级临时表,否则为实体表;
  13、因sybase为列存储模式,在执行上insert语句会比update语句慢,尤其表数据越多insert效率
  
  就越慢;所以在etl时建议多用update而不是insert
  14、虽说sybase为列存储模式,每个字段上都有默认索引,但对于经常的两表的关联键还是要建立
  
  索引否则会经常报query_temp_space_limit不足的错误;
  15、存储过程中也可以显示的执行ddl语句,这点与oracle不同;
  16、空字符串''在sybase中也是个字符而不是null值,这点要注意;
  17、调整session的临时空间set temporary option query_temp_space_limit = '150000'; 15000
  
  为大小,如写0则没限制大小
  ==================================常用函数===========================================
  字符串函数
  1)isnull(exp1,exp2,exp3,...) :返回第一个非空值,用法与coalesce(exp1,exp2[,exp3...])相
  
  同
  3)trim(exp) :去除两边空格
  4)dateformat(date_exp,date_format) :日期型转字符型;
  5)string(exp):转为字符型;
  6)substring(exp,int-exp1,[int-exp2]):截取exp从int-exp1开始,截取int-exp2个字符;
  7)replace(o-exp,search-exp,replace-exp):从o-exp搜索search-exp,替换为replace-exp;
  8)space(int_exp):返回int个空格;
  8)upper(exp):转为大写字母,等价于ucase(exp);
  8)lower(exp):转为小写字母,
  8)charindex(exp1,exp2):返回exp2字符串中exp1的位置!定位,exp1 查找的字符,exp2 被查找
  
  的字符串;
  8)datalength(char_expr):在char_expr中返回字符的长度值,忽略尾空;
  8)right(char_expr,int_expr):返回char_expr右边的int_expr个字符;
  8)left(char_expr,int_expr):返回char_expr左边的int_expr个字符;
  8)replicate(char_expr,int_expr):重复char_expr,int_expr次;
  8)stuff(expr1,start,length,expr2):用expr2代替epxr1中start起始长为length的字符串;
  8)reverse(char_expr):反写char_expr中的文本;
  8)ltrim(char_expr):删除头空;
  8)rtrim(char_expr):删除尾空;
  8)str(float_expr[,length[,decimal]]):进行数值型到字符型转换;
  8)patindex("%pattern%",expression):返回指定样式的开始位置,否则为0;
  8)nullif(exp1,exp1):比较两个表达式,如果相等则返回null值,否则返回exp1
  8)number(*):返回序号,相当于oracle的rowid,但有区别;
  其他函数
  8)rank() over(partition by .. order by ..) 分组分析函数,相同的order by值,返回顺序值
  
  一样,且partition by 只支持一个字段或一个字段组(需多个字段分组的则要用 || 拼为一个字
  
  段(待确认))
  8)返回可读的 全局id uuidtostr(newid())
  8)col_length(tab_name,col_name):返回定义的列长度;兼容性:iq&ase
  8)length(exp):返回exp的长度;兼容性:iq
  转换函数
  8)convert(datetype,exp[,format-style]):字符转日期型 或date(exp);兼容性:iq&ase
  format-style值 输出:
  112 yyyymmdd
  120 yyyy-mm-dd hh:nn:ss
  select convert(date,'20101231',112),convert(varchar(10),getdate(),120) ; 
  --结果 
   2010-12-31 2011-04-07
  8)cast(exp as data-type):返回转换为提供的数据类型的表达式的值; 兼容性:iq
  日期函数
  8)day(date_exp):返回日期天值,days(date_exp,int):返回日期date_exp加int后的日期;month
  
  与months、year与years同理;
  8)date(exp):将表达式转换为日期,并删除任何小时、分钟或秒;兼容性:iq
  8)datepart(date-part,date-exp): 返回日期分量的对应值(整数);
  8)getdate():返回系统时间;
  8)datename(datepart,date_expr):以字符串形式返回date_expr指定部分的值,转换成合适的名字
  
  ;
  8)datediff(datepart,date_expr1,date_expr2):返回date_expr2-date_expr1,通过指定的
  
  datepart度量;
  8)dateadd(date-part,num-exp,date-exp):返回按指定date-part分量加num-exp值后生成的
  
  date-exp值;兼容性:iq&ase
  date-part日期分量代表值:
  缩写 值
  yy 0001-9999
  qq 1-4
  mm 1-12
  wk 1-54
  dd 1-31
  dy 1--366
  dw 1-7(周日-周六)
  hh 0-23
  mi 0-59
  ss 0-59
  ms 0-999
  数值函数
  8)ceil(num-exp):返回大于或等于指定表达式的最小整数;兼容性:iq&ase;
  8)floor(numeric_expr):返回小于或等于指定值的最大整数;
  8)abs(num-exp):返回数值表达式的绝对值;兼容性:iq&ase;
  8)truncnum(1231.1251,2):截取数值;不四舍五入;
  8)round(numeric_expr,int_expr):把数值表达式圆整到int_expr指定的精度;
  8)rand([int_expr]):返回0-1之间的随机浮点数,可指定基值;
  8)sign(int_expr):返回正 1,零0或负-1;
  8)sqrt(float_expr):返回指定值的平方根; 
  8)pi():返回常数3.1415926;
  8)power(numeric_expr,power):返回numeric_expr的值给power的幂;
  8)exp(float_expr):给出指定值的指数值;
  
  ==================================常用ddl语句
  
  ===========================================
  sybase中ddl语句不能修改字段的数据类型,只能修改空与非空:
  1.删除列:
  alter table table_name delete column_name;
  2.增加列:
  alter table table_name add (column_name data_type [not] null);
  3.修改列的空与非空:
  alter table table_name modify column_name [not] null;
  4.修改列名:
  alter table table_name rename old_column_name to new_column_name;
  5.快速建立临时表:
  select * into [#]table_name from .....;
  6、修改表名:
  alter table old_table_name rename new_table_name
  7.增加主键约束:
  alter table tb_name add constraint pk_name primary key(col_name,..)
  8.删除主键约束:
  alter table tb_name drop constraint pk_name;
  9.建立自增长字段,与oracle的sequence类似:
  create table tmp_001 (res_id integer identity not null);
  10.添加表注释:
  comment on table table_name is '....';
  11.创建索引:
  create index index_name on table_name(column_name);

xzc 2012-06-18 10:57
]]>
网站地图