总结Sybase IQ的使用心得.doc
文本预览下载声明
总结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而不是INSERT14、虽说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
显示全部