posts - 108,comments - 56,trackbacks - 0

首先声明,我使用的是Informix7.x版本,

1、不等于 :<>

2、判断是否为空:is null

3、nvl函数

   NVL(expr1,expr2):如果expr1是NULL,则返回expr2,否则返回expr1.返回值与expr1类型相同,除非expr1是字符串类,在这种情况下将返回VARCHAR2类型.这个函数用于确保查询记录集中不包含NULL值。   
   NVL(expr1,expr2,expr3) :如果expr1是NULL,则返回expr2,否则返回expr3.返回值与expr2类型相同,除非expr2是字符类型,在这种情况下返回VARCHAR2类型;
   NULLIF(a,b) :如果a等于b返回NULL,如果不等于返回b。


4、substr()函数
   substr(str,startindex,count);其他数据库一般用substring(str,startindex,count);

5、string转换成sql的date型:to_date('2006-12-25','%Y-%m-%d');

6、得到昨天的日期:today-1

7、查看sql的执行过程:

1)登录:su - informix
2)建立SQL文件,里面放要执行的sql语句,同时在前面加一行,set explain on;sql 语句;
3)导入sql文件执行:isql -s databasename<filename
4)查看执行过程:cat sqexplain.out


8、使用临时表:
    into temp tablename with no log ;最好加上with no log;

9、建立存储过程:

1)文件命名为zeng.sql
   
drop procedure zeng;
   
create procedure zeng(deptstr varchar(20),time1 char(10),time2 char(10))
   returning 
decimal(14,2);
   define mysum 
decimal(14,2);
   
select a.ownid,a.masterid,c.sendsum from distribute a,order_bankbill b,bankbill c where a.orderid=b.orderid and b.bankbillid=c.id and a.deptno=deptstr and c.sendtime >=time1 and c.sendtime <=time2 into temp mytemp with no log ; 
   
select nvl(sum(sendsum),0into mysum from mytemp where ownid=masterid;
   
return mysum WITH  RESUME;
   
end procedure
2)导入到数据库:
   dbaccess databasename zengchao.sql
3)进入数据库,执行
   dbaccess databasename
    ……
   
execute procedure zeng ('00xm010101','2006-03-01','2006-03-25');


10、update的一种用法

  update distribute set (masterid,mastername)=
((
select nvl(groupmanager,0),nvl(groupmanagername,''from department where distribute.deptno=department.departmentno ))
where opertime>='2007-02-11';//注意后面不要漏掉一层括号


11、unique与distinct的区别:
   unique是distinct的同义词,功能完全相同。distinct是标准语法,其他数据库 sql server,db2,oracle,sybase,mysql等都支持。unique,informix数据库认识,其他数据库有的认识,有的不认识。

12、Case语句用法:

select name,case when id=9188 then 'ttt' else name end from employee where departmentno ='00xm';


13、使用优化器(update statistics):

优化使系统表的信息与实际一致,使搜索树的路径最优。同时,整理索引树。例: 
1update statistics for table 
2update statistics for procedure 
3update statistics for table rta1(bm_cert)
4update statistics high for table rta1(bm_cert) resolution 0.5


14、连接字符串(||):
   select id ||':'|| name from employee

15、JDBC事务与游标
   注意要先关闭ResultSet然后提交事务;

16、informix备份表数据(isql)

   1)导出:unload to "zengchao.data" select * from position;
   
2)导入:load from "zengchao.data" insert into position;


17、关于like与[]

   select count(*from employee where departmentno like '00xm01%';
   
select count(*from employee where departmentno[1,6]='00xm01';
   这两条语句,执行差不多,但是估计成本是第二个比第一个好


18、informix下更改表名

update systables set tabname='oldredeploy' where tabname='redeploy';


19、count(name)与count(*)区别

   如果name列有null值,那么如下两条语句得到的返回值不等
   
select count(*from tablename
   
select count(name) from tablename

20、锁表的解决方法(转)
1、找到被锁表的partnum:select  hex(partnum) from systables  where  tabname = ”tabalname”;
2、onstat -k|grep partnum 找到该锁的owner;
3、onstat -| grep owner 找到用户会话session号;
4、onmode -z sesid 杀掉该session;
5、如果第4步失败,则进一步onstat -g ses | grep sesid 找到该发起该会话的pid;
6kill pid 或 kill -9 pid;
7、特殊情况:在第2步中,如果发现锁的owner为0,则检查:
 onstat 
-x
 onstat 
-G
看是否存在全局事务,若有全局事务,则继续以下步骤:
select hex(tx_addr) trans_addr,hex(tx_lklist) lock_addr from systrans where hex(tx_addr) like '%c000000007674c58%';需要说明的是,c000000007674c58是使用onstat -x 或 onstat -G得到的全局事务的地址。上面SQL语句提供出该全局事务对应的锁地址,这时如果得到的锁地址与锁表的锁地址相同的话,你就必需从应用端(通常是三层结构的中间件)发命令让该全局事务回滚或提交,否则该锁会被一直持有,直到你执行oninit -i。 

 

21、从数据库的数据导成Excel格式

方法一:
1)导成csv文件:isql -s databasename unload to data.csv select * from tablename;
2)转换成Excel:用Excel中的“数据”->“导入外部数据”->“导入文本文件”,选择分隔符为'|'
方法二:
用Excel中的“数据”
->“导入外部数据”->“新建数据库查询”,然后配置数据源


22、配置Informix-CLI
   1、配置Informix-Setnet32
  
   上面的czzymis修改为online_web
  
   2)配置Odbc-Administrator
   a)新建一用户DNS
   
   b)配置DNS
   
   c)高级属性
  

23、系统表(syscolumns)中字段类型(coltype)字段的含义
   coltype定义在informix/incl/esql/sqltypes.h文件中,如下图
     
    注意:如果,某字段要求非空,则在原类型上加256。例如,SERIAL对应的是6,SERIAL not NULL类型对应的是(6+256)=262。

24、常用函数(来自网络)

聚集函数:
avg,求平均值
count,统计记录的条数
max,求最大值
min,求最小值
range,计算所选行的最大值与最小值的差
stdev,计算所选行的标准偏差
sum,求和函数
variance,函数返回值样本的方差做为所有选择行的方差的无偏估计。公式,(
sum(xi**2)-sum(xi)**2)/N)/(N-1),其中xi是列中的每个值,N是列中值的总和。

时间函数:
day,mdy,month,weekday,year 这些函数返回与用来调用函数的表达式或自身变量的值。Current返回当前的日期和时间值,可以用extend函数来调整date或datetime值的精度。使用day和current 函数来将列值与当前日期进行比较。
date函数将字符串函数转换为DATE值。例date(‘
12/7/04’)
to_char函数将datetime和date值转化为字符值。
to_date函数将字符值转化为datetime类型的值。例to_date(“
1978-10-07 10:00” ,”%Y-%m-%%H:%M)

基数函数:
cardinality(仅适用IDS)函数对集合包含的元素数目计数。

智能大对象函数(仅适用与IDS):
filetoblob( ),将文件复制到BLOB列中
filetoclob( ),将文件复制到CLOB列中
locopy( ),将BLOB或CLOB类型的数据复制到另一个BLOB或CLOB列中
lotofile( ),将BLOB或CLOB复制到文件中

字符串处理函数:
lower,将字符串中每个大写字母转换为小写字母
upper,将字符串中每个小写字母转换为大写字母
initcap,将字符串中每个词的首写字母转换成大写
replace,将字符串中的某一组字符转换成其他字符,例replace(col,'abc','')
substr,返回字符串中的某一部分,例substr(col,
1,2)
substring,返回字符串中的某一部分,例substring(col,from 1 to 4)

其他函数:
hex,返回表达式的十六进制数
round,返回表达式的四舍五入值
trunc,返回表达式的截断值
length,计算表达式的长度
user,返回执行查询的用户的用户名(登陆帐户名)
today,返回当前系统日期
dbservername,返回数据库服务器的名称,同sitename
dbinfo,返回数据库的相关信息
decode,函数来将一个具有一个值的表达式转换为另一个值
decode(test,a,a_value,b,b_value,c,c_value……),decode函数不支持TEXT和BYTE类型。
nvl,来将求值为空的表达式转化为另一个想要指定的值。


25、修改/添加表的列的属性
 例如:alter table student modify studentno integer not null;
 alter table student add sex char(1) not null;


26、导出数据库的表结构
  导出特定的某个表:dbschema -t tabname -d databasename tarfilename
  导出整个数据的所以表:dbschema 
-d databasename tarfilename
posted on 2007-09-05 15:29 破茧而出 阅读(1741) 评论(0)  编辑  收藏 所属分类: 数据库

只有注册用户登录后才能发表评论。


网站导航: