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),
0
)
into
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):

优化使系统表的信息与实际一致,使搜索树的路径最优。同时,整理索引树。例:
1
.
update
statistics
for
table
2
.
update
statistics
for
procedure
3
.
update
statistics
for
table
rta1(bm_cert)
4
.
update
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
-
u
|
grep owner 找到用户会话session号;
4
、onmode
-
z sesid 杀掉该session;
5
、如果第4步失败,则进一步onstat
-
g ses
|
grep sesid 找到该发起该会话的pid;
6
、
kill
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中的“数据”
->
“导入外部数据”
->
“新建数据库查询”,然后配置数据源