decode函数说明:
decode函数可以将输入数值与函数中的参数列表相比较,根据输入值返回一个对应值。
函数的参数列表是由若干数值及其对应结果值组成的若干序偶形式。当然,如果未能与任何一个实参序偶匹配成功,则函数也有默认的返回值。区别于SQL的其它函数,DECODE函数还能识别和操作空值。
如果应用中没有建立代码表,使用docode函数进行key–>value的转换是一种不错的替代方案,只是为应用的后期维护带来麻烦。
语法如下:
DECODE(control_value,value1,result1[,value2,result2…][,default_result]);
参数说明:
control _value
试图处理的数值。可以是数据库中表的某一列,DECODE函数将该数值与后面的一系列的偶序相比较,以决定返回值。
value1
是一组成序偶的数值。如果输入数值与之匹配成功,则相应的结果将被返回。对应一个空的返回值,可以使用关键字NULL于之对应
result1
是一组成序偶的结果值。
default_result
未能与任何一个值匹配时,函数返回的默认值。
示例:
首先创建一张sale表,并插入一些测试数据:
create table class(id char(2),name varchar2(50), valid_flag char(1));
insert into class values(’01’,’语文’,’Y’);
insert into class values(’02’,’数学’,’Y’);
insert into class values(’03’,’外语’,’N’);
insert into class values(’04’,’历史’);
首先看一下decode函数的基本用法:
select id, name, decode(valid_flag, ‘Y’, ‘有效’, ‘N’, ‘无效’,’未设置’) from class;
ID NAME DECODE(VALID_FLAG,’Y’,’有效’,’
— ————————————————– ——————————
01 语文 有效
02 数学 有效
03 外语 无效
04 历史 未设置
说明:
当valid_flag为’Y’时,则返回’有效’;
当month为’N’时,则返回’无效’;
其他则返回’未设置’。
以上的sql语句可以通过case实现:
select id, name, case valid_flag
when ‘Y’ then ‘有效’
when ‘N’ then ‘无效’
else ‘未设置’ end
from class;
由以上sql语句可以看出,使用decode函数要简洁的多。
另外,还可以在Order by中使用decode:
例:表table_subject,有subject_name列。要求按照:语、数、外的顺序进行排序。这时,就可以非常轻松的使用Decode完成要求了。
select * from table_subject order by decode(subject_name, ‘语文’, 1, ‘数学’, 2, , ‘外语’,3)
问:什么是NULL?
答:在我们不知道具体有什么数据的时候,也即未知,可以用NULL,我们称它为空,ORACLE中,含有空值的表列长度为零。
ORACLE允许任何一种数据类型的字段为空,除了以下两种情况:
1、主键字段(primary key),
2、定义时已经加了NOT NULL限制条件的字段
说明:
1、等价于没有任何值、是未知数。
2、NULL与0、空字符串、空格都不同。
3、对空值做加、减、乘、除等运算操作,结果仍为空。
4、NULL的处理使用NVL函数。
5、比较时使用关键字用“is null”和“is not null”。
6、空值不能被索引,所以查询时有些符合条件的数据可能查不出来,count(*)中,用nvl(列名,0)处理后再查。
7、排序时比其他数据都大(索引默认是降序排列,小→大),所以NULL值总是排在最后。
使用方法:
现有一个商品销售表sale,表结构为:
month char(6) –月份
sellnumber(10,2) –月销售金额
create table sale (month char(6),sell number);
然后我们给该表插入12条记录:
insert into sale values(‘200001’,1000);
insert into sale values(‘200002’,1100);
insert into sale values(‘200003’,1200);
insert into sale values(‘200004’,1300);
insert into sale values(‘200005’,1400);
insert into sale values(‘200006’,1500);
insert into sale values(‘200007’,1600);
insert into sale values(‘200101’,1100);
insert into sale values(‘200202’,1200);
insert into sale values(‘200301’,1300);
insert into sale values(‘200008’,1000);
insert into sale(month) values(‘200009’);
注意:最后一条记录的sell值为空,接下来测试几条sql来看看null的特性:
select * from sale where null=null;
MONTH SELL
—— —-
没有任何输入,说明null=null返回false,null与其自身都不相等,呵呵,有一点怪异。
select * from sale where null = 0;
MONTH SELL
—— —-
没有任何输入,说明null=0返回false,null与0不相等。
select * from sale where null = ”;
MONTH SELL
—— —-
没有任何输入,说明null=”返回false,null与”不相等。
select * from sale where ”=”;
MONTH SELL
—— —-
没有任何输入,说明”=”返回false,”与”不相等。
SQL> select * from sale where null is null;
MONTH SELL
—— —-
200001 1000
200002 1100
200003 1200
200004 1300
200005 1400
200006 1500
200007 1600
200101 1100
200202 1200
200301 1300
200008 1000
200009
12 rows selected
sale表的所有数据都成功返回,说明null is null返回true,看来null只能使用is null来识别。
再来看看null对于集合函数的影响:
SQL> select count(*) from sale;
COUNT(*)
———-
12
SQL> select count(sell) from sale;
COUNT(SELL)
———–
11
可以看出count函数在使用某一列作为参数的时候不会计算null,而count(*)会将null计算在内。
from:http://database.51cto.com/art/200511/10681.htm
参考链接:
http://www.blogjava.net/lingy/archive/2009/06/29/284559.html
instr的语法如下:
instr( string1, string2 [, start_position [, nth_appearance ] ] )
函数说明:
该函数返回参数string2在参数string1中的位置。
start_position参数表示将从string1的第几个字符开始来查找string2。该参数为可选参数,如果省略,那么默认为1。instr函数默认的查找顺序为从左到右。当该参数为负数的时候,则从右边开始查找。
nth_appearance表示返回第几次出现的string2的位置。该参数为可选参数,如果省略则默认为1,也就是返回首次出现string2的位置。
示例:
SELECT INSTR(‘CORPORATE FLOOR’, ‘OR’, -1, 1) “aaa” FROM DUAL;
aaa
———-
14
参考链接:
http://www.techonthenet.com/oracle/functions/instr.php
http://download.oracle.com/docs/cd/B28359_01/olap.111/b28126/dml_functions_1103.htm
http://www.psoug.org/reference/substr_instr.html
数组是用来集合相同类型的对象并通过一个名称来引用这个集合。作为一种最典型的数据结构,基本上所有的高级语言都有数组的概念,包括C、C++、Java、php等。
在Java中,使用数组分为以下三个步骤:
(1)声明数组;
(2)创建数组;
(3)初始化数组。
下面,我们按以上步骤来讲解数组在Java中的使用。
声明数组
一维数组的声明方式:
type var[]; 或type[] var;
推荐使用后者,同时需要注意声明数组时不能指定其长度(数组中元素的个数)。
在Java中,我们可以声明任何类型的数组──原始类型或类类型:
char chars[];
Point p; // where point is a class
在Java编程语言中,即使数组是由原始类型构成,甚或带有其它类类型,数组也是一个对象。声明不能创建对象本身,而创建的是一个引用,该引用可被用来引用数组。数组元素使用的实际存储器可由new语句或数组初始化软件动态分配。
创建数组
Java中使用关键字new创建数组对象,格式为:
数组名 = new 数组元素的类型 [数组元素的个数]
示例:
char[] chars = new char[20];
Point[] points= new Point[20];
第一行创建了一个可以容纳20个char值的数组;
第二行创建了一个可以容纳20个Point对象的数组;值得注意的是,此处并没有创建20个Point对象,创建工作必须分别完成如下:
points[0] = new Point();
points[1] = new Point();
等等。这部分工作被称为数组的初始化。
初始化数组
当创建一个数组时,每个元素都被初始化。在上述char数组chars的例子中,每个值都被初始化为0 (\u0000-null)字符;在数组points的例子中, 每个值都被初始化为null,表明它还未引用一个Point对象。在经过赋值 points[0]= new Point()之后,数组的第一个元素引用为实际Point对象。数组的初始化有如下两种方式:
1.动态初始化:数组定义与为数组分配空间和赋值的操作分开进行;
2.静态初始化:在定义数组的同时就为数组元素分配空间并赋值;
动态初始化数组示例:
public class TestD {
public static void main(String args[]) {
int a[];
a = new int[3];
a[0] = 0;
a[1] = 1;
a[2] = 2;
Date days[];
days = new Date[3];
days[0] = new Date(2008, 4, 5);
days[1] = new Date(2008, 2, 31);
days[2] = new Date(2008, 4, 4);
}
}
class Date {
int year, month, day;
Date(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
}
静态初始化数组示例:
public class TestS {
public static void main(String args[]) {
int a[] = { 0, 1, 2 };
Time times[] = { new Time(19, 42, 42), new Time(1, 23, 54), new Time(5, 3, 2) };
}
}
class Time {
int hour, min, sec;
Time(int hour, int min, int sec) {
this.hour = hour;
this.min = min;
this.sec = sec;
}
}
数组的默认初始化
数组是引用类型,它的元素相当于类的成员变量,因此数组分配空间后,每个元素也被按照成员变量的规则被隐式初始化。
public class TestDefault {
public static void main(String args[]) {
int a[] = new int[5];
System.out.println(“” + a[3]);
}
}
参考链接:
http://developer.51cto.com/art/200906/128274.htm
http://tech.ccidnet.com/art/3539/20070608/1107247_1.html
http://tech.163.com/06/0410/09/2EBATT9K0009159T.html
http://java.e800.com.cn/articles/2008/73/1215063991778_1.html
http://www.qqread.com/java/2008/06/w416323.html
NVL函数
在Oracle/PLSQL中,NVL函数会将一个NULL值替换为一个非NULL值。
语法
NVL(eExpression1, eExpression2)
参数
eExpression1, eExpression2
如果 eExpression1 的计算结果为 null 值,则 NVL( ) 返回 eExpression2。如果 eExpression1 的计算结果不是 null 值,则返回 eExpression1。eExpression1 和 eExpression2 可以是任意一种数据类型。如果 eExpression1 与 eExpression2 的结果皆为 null 值,则 NVL( ) 返回 .NULL.。
返回值类型
字符型、日期型、日期时间型、数值型、货币型、逻辑型或 null 值
说明
在不支持 null 值或 null 值无关紧要的情况下,可以使用 NVL( ) 来移去计算或操作中的 null 值。
示例1
select nvl(‘aaa’,’bbb’) from dual;
NVL(‘AAA’,’BBB’)
——————————–
aaa
示例2
select nvl(null,’bbb’) from dual;
NVL(NULL,’BBB’)
——————————–
bbb
返回字符串bbb
示例3
select nvl(NULL,’bbb’) from dual;
NVL(NULL,’BBB’)
——————————–
bbb
返回字符串bbb,null不区分大小写。
示例4
select nvl(‘null’,’aaa’) from dual;
NVL(‘NULL’,’AAA’)
—————–
null
字符串’null’不是null。
比利时一家杂志,曾对全国60岁以上的老人搞了一次问卷调查,调查的题目是:”你最后悔的是什么?”并列出了十几项生活中容易后悔的事情,供被调查者选择。于是,就出现了这样一个结果。
有72%的人后悔年轻时努力不够,以至事业无成。
由此我想起一个故事,说有一个40岁的人被医师告知患了绝症,最多再活三年时间。因此他为了使自己最后的生命更有意义,拟出一个『三年要做十件事』的工作计划。其中包括写一本书、学一门外语、搞一项发明、辨一个工厂、游30座名山、看50个城市等等,而且计划出后便立即付诸行动。在过了二年零八个月的时候,10项目标全都完成。可当他再到医院复诊时,却发现是医师当时拿错了病历,自己根本没有患病。这也是一个经验,如果别人工作你也工作,别人休息你也休息,别人娱乐你也娱乐,那么别人得到什么,你也只能得到什么,要想得到别人得不到的东西,就得付出别人不愿付出的东西。尤其是在你还年轻的时候,还有机会竞争的时候。
More …
null是java的保留字,用来表示一个空引用,比如一个不指向任何对象的引用。null的底层实现其实是二进制的0,但对java语言而言,null的意义远比数字0意义深远。
执行如下的代码:
x.doSomething();
如果x是null的话,我们就会得到如下异常:java.lang.NullPointerException。
解决的方式如下:
if ( x != null )
{
x.doSomething();
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
来源:http://mindprod.com/jgloss/null.html
一篇不错的讲解null的文章:http://lavasoft.blog.51cto.com/62575/79243
http://stackoverflow.com/questions/271526/how-to-avoid-null-statements-in-java
lpad函数从左边对字符串使用指定的字符进行填充。从其字面意思也可以理解,l是left的简写,pad是填充的意思,所以lpad就是从左边填充的意思。
语法格式如下:
lpad( string, padded_length, [ pad_string ] )
string
准备被填充的字符串;
padded_length
填充之后的字符串长度,也就是该函数返回的字符串长度,如果这个数量比原字符串的长度要短,lpad函数将会把字符串截取成从左到右的n个字符;
pad_string
填充字符串,是个可选参数,这个字符串是要粘贴到string的左边,如果这个参数未写,lpad函数将会在string的左边粘贴空格。
示例1:
SQL> select lpad(‘abcde’,10,’x’) from dual;
LPAD(‘ABCDE’,10,’X’)
——————–
xxxxxabcde
示例2:
SQL> select lpad(‘abcde’,10,’oq’) from dual;
LPAD(‘ABCDE’,10,’OQ’)
———————
oqoqoabcde
示例3:
SQL> select lpad(‘abcde’,2) from dual;
LPAD(‘ABCDE’,2)
—————
ab
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
与lpad函数对应的是rpad函数:
rpad函数从右边对字符串使用指定的字符进行填充,语法格式与lpad格式相同:
rpad(string,padded_length,[pad_string])
string
被填充的字符串
padded_length
字符的长度,是返回的字符串的数量,如果这个数量比原字符串的长度要短,rpad函数将会把字符串截取成从左到右的n个字符;
pad_string
是个可选参数,这个字符串是要粘贴到string的右边,如果这个参数未写,lpad函数将会在string的右边粘贴空格。
例如:
rpad(‘tech’, 7); 将返回’ tech’
rpad(‘tech’, 2); 将返回’te’
rpad(‘tech’, 8, ‘0’); 将返回’tech0000′
rpad(‘tech on the net’, 15, ‘z’); 将返回 ‘tech on the net’
rpad(‘tech on the net’, 16, ‘z’); 将返回 ‘tech on the netz’
1、
首先上传表情图片到相应的表情目录中(images/smilies/表情目录/)。表情图片文件名只允许数字、26 个英文字母、下划线、半角空格及 <>-.&[]() 等符号,文件名长度不能超过 30 字节,否则将会无法识别。
2、
进入后台管理界面,选择帖子»表情管理,在新增一行填入显示顺序(2)、表情分类(兔斯基),点击提交按钮。

3、
在新添加的表情分类一行有“详细”,点击该链接,进入新添加表情分类的详细设置页面。点击“添加”按钮,进入表情添加页面:

4、
在表情添加页面,点击“搜索”按钮,系统会将之前上传的所有自定义表情显示出来。在自定义表情列表的底部,需要批量设置表情代码:

批量设置完表情代码之后,点击“提交”按钮,于是,表情列表更新完毕。
5、
返回表情管理主页面,表情数量如果显示正确就说明表情包安装成功。

6、
然后通过工具»更新缓存后就可以从前台看到我们刚刚添加的自定义表情了。
自己做过三个社区的管理员。
第一个接手的时候已经是一个万人网游社区了,虽然我知道那同时在线的人数有些水分,确切说应该是半个小时内同时在线的人数(一般社区默认的都是10分钟吧),但半个小时同时在线18000多人,应该还是比较强悍的吧?
第二个做的是房产社区,或者说是业主社区的管理员。接手的时候最高5人同时在线,5个月后走的时候最高在线人数50多不到60人。我不能说我是从零做起的,因为在此之前,已经有人负责做这个社区做了两三个月了。
第三个社区是就业网站附属的社区,真真正正的从零做起,真真正正的孤军奋战。4个月,实际注册会员近500人,最高在线人数300人左右。 More …