2008年5月20日星期二

MySQL日期函数全攻略

对于每个类型拥有的值范围以及并且指定日期何时间值的有效格式的描述见7.3.6 日期和时间类型。

这里是一个使用日期函数的例子。下面的查询选择了所有记录,其date_col的值是在最后30天以内:

mysql> SELECT something FROM table PHPChina 开源社区门户 Q;P q A7c7S \ ~

WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30;

DAYOFWEEK(date) PHPChina 开源社区门户 { R h m"a-b6n

返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。这些索引值对应于ODBC标准。

3e Y3r Y h0mysql> select DAYOFWEEK('1998-02-03');

D P p0W l T:v N { U v0-> 3

WEEKDAY(date) PHPChina 开源社区门户 p(J6w D l6} ^&p#r D

返回date的星期索引(0=星期一,1=星期二, ……6= 星期天)。

~1b g&h+q U e7O P,m s G- 0mysql> select WEEKDAY('1997-10-04 22:23:00');

0D [ [,v*~6{ E D A0-> 5 PHPChina 开源社区门户0^(e J'T4W3]

mysql> select WEEKDAY('1997-11-05'); PHPChina 开源社区门户 A o8N ` Y1@ j5V.g

-> 2

DAYOFMONTH(date) PHPChina 开源社区门户.[ S s u A*])T g4t

返回date的月份中日期,在1到31范围内。

\ P T:K8j!b,` I0mysql> select DAYOFMONTH('1998-02-03'); PHPChina 开源社区门户!O1x o o R'T {

-> 3

DAYOFYEAR(date) PHPChina 开源社区门户 ` u:_ }6{ o o

返回date在一年中的日数, 在1到366范围内。

m ~* R L$B Z2O0mysql> select DAYOFYEAR('1998-02-03');

d ]0f D$r m s G0-> 34

MONTH(date) PHPChina 开源社区门户3^(z \5u p D u P1v

返回date的月份,范围1到12。

(r9{$` r A F z;e0mysql> select MONTH('1998-02-03'); PHPChina 开源社区门户 X O8c z"@/~ E u

-> 2

DAYNAME(date)

x6v!V X%w6s [ q @ H0返回date的星期名字。 PHPChina 开源社区门户0[4}#_ C G B8w

mysql> select DAYNAME("1998-02-05"); PHPChina 开源社区门户 h J)D W*] l f

-> 'Thursday'

MONTHNAME(date)

8Q y I k1m t q!y \0返回date的月份名字。 PHPChina 开源社区门户,]y#l C l0d$h ^

mysql> select MONTHNAME("1998-02-05");

^:L:W J \0-> 'February'

QUARTER(date) PHPChina 开源社区门户 `&Z.n7r9E

返回date一年中的季度,范围1到4。 PHPChina 开源社区门户 _ [ B @:v _

mysql> select QUARTER('98-04-01');

%p ] J [ a/o a0R*^!t'C0-> 2

WEEK(date)

_4x P M"m [ i0 

_9c h*W o b ~+Q0WEEK(date,first) PHPChina 开源社区门户 T R 4G n A$~

对于星期天是一周的第一天的地方,有一个单个参数,返回date的周数,范围在0到52。2个参数形式WEEK()允许你指定星期是否开始于星期天或星期一。如果第二个参数是0,星期从星期天开始,如果第二个参数是1,从星期一开始。 PHPChina 开源社区门户 N7`;F"s4R4`9H x

mysql> select WEEK('1998-02-20');

k8[ x+-d X T q0-> 7 PHPChina 开源社区门户 v:@ D }%] i j @

mysql> select WEEK('1998-02-20',0);

v ]$c8a6S+]0-> 7 PHPChina 开源社区门户 m ] l:z _ i

mysql> select WEEK('1998-02-20',1);

v b S+Q1W&H)j+t0-> 8

YEAR(date) PHPChina 开源社区门户'[1a8_ eE r \

返回date的年份,范围在1000到9999。

"o F,m `/C u b `!0mysql> select YEAR('98-02-03');

t O$R { f ^ T c7J0-> 1998

HOUR(time) PHPChina 开源社区门户 p,K$S+t Z z'f \ S;p

返回time的小时,范围是0到23。 PHPChina 开源社区门户 p+V Q" c'P

mysql> select HOUR('10:05:03'); PHPChina 开源社区门户3z)q w K k;C B

-> 10

MINUTE(time)

#G ~ { F n0
返回time的分钟,范围是0到59。 PHPChina 开源社区门户4}3u)`&x k b/b d!n

mysql> select MINUTE('98-02-03 10:05:03');

p L }'S+F%^ z0-> 5

SECOND(time) PHPChina 开源社区门户 } [1w'{ ] R$_ b

回来time的秒数,范围是0到59。 PHPChina 开源社区门户'O Y.#v$c

mysql> select SECOND('10:05:03'); PHPChina 开源社区门户 H"f G"n0m

-> 3

PERIOD_ADD(P,N)

.m.p r i ^1Z(D P.q k F P0增加N个月到阶段P(以格式YYMM或YYYYMM)。以格式YYYYMM返回值。注意阶段参数P不是日期值。 PHPChina 开源社区门户$m6{ f7G1q M j

mysql> select PERIOD_ADD(9801,2);

1I+o m)i z S v0-> 199803

PERIOD_DIFF(P1,P2) PHPChina 开源社区门户9m7a*N E R "J f J5 Q

返回在时期P1和P2之间月数,P1和P2应该以格式YYMM或YYYYMM。注意,时期参数P1和P2不是日期值。 PHPChina 开源社区门户 u F#Y3m/r R*K5~

mysql> select PERIOD_DIFF(9802,199703);

y$y B E B4A:p L _7Q0-> 11

DATE_ADD(date,INTERVAL expr type) PHPChina 开源社区门户 J#v,k ` R 5G K

 

4M J(Z \6W/p(M a O0DATE_SUB(date,INTERVAL expr type)

)n-[!A/x E$g8~0 

%J1G9W!` D M/Y4}5\ S0ADDDATE(date,INTERVAL expr type)

L } _9L o4H0  PHPChina 开源社区门户+} .L _6F);c J

SUBDATE(date,INTERVAL expr type) PHPChina 开源社区门户 R R-Q ^ Q w

这些功能执行日期运算。对于MySQL 3.22,他们是新的。ADDDATE()和SUBDATE()是DATE_ADD()和DATE_SUB()的同义词。PHPChina 开源社区门户 l F-m L T

在MySQL 3.23中,你可以使用+和-而不是DATE_ADD()和DATE_SUB()。(见例子)date是一个指定开始日期的PHPChina 开源社区门户 e J F7X B w. 4Q

DATETIME或DATE值,expr是指定加到开始日期或从开始日期减去的间隔值一个表达式,expr是一个字符串;它可以以

y x6s Y8d#]-@,q A0一个“-”开始表示负间隔。type是一个关键词,指明表达式应该如何被解释。EXTRACT(type FROM date)函数从日期PHPChina 开源社区门户 k:a _ c L0l P

中返回“type”间隔。下表显示了type和expr参数怎样被关联: type值含义 期望的expr格式 PHPChina 开源社区门户 k(\ z F {

SECOND 秒 SECONDS PHPChina 开源社区门户 C m g"i6U n3["u `

MINUTE 分钟 MINUTES

D o* w(Z5r'R0HOUR 时间 HOURS PHPChina 开源社区门户 p p(W N

DAY 天 DAYS PHPChina 开源社区门户 Q%H }5e O

MONTH 月 MONTHS PHPChina 开源社区门户 g [ c t A/n

YEAR 年 YEARS PHPChina 开源社区门户 a O.Q/H _*S0v9S*z

MINUTE_SECOND 分钟和秒 "MINUTES:SECONDS"

b {(c-g 0A$ 5p0HOUR_MINUTE 小时和分钟 "HOURS:MINUTES"

.Q B i0X2y0DAY_HOUR 天和小时 "DAYS HOURS"

%@ A9d)x _'G c t6` G0YEAR_MONTH 年和月 "YEARS-MONTHS"

N/N a {-S d0HOUR_SECOND 小时, 分钟, "HOURS:MINUTES:SECONDS"

c:Y9T 4N M0DAY_MINUTE 天, 小时, 分钟 "DAYS HOURS:MINUTES" PHPChina 开源社区门户 G [ h F e$f

DAY_SECOND 天, 小时, 分钟, 秒 "DAYS HOURS:MINUTES:SECONDS"

MySQL在expr格式中允许任何标点分隔符。表示显示的是建议的分隔符。如果date参数是一个DATE值并且你的计算仅仅包含YEAR、MONTH和DAY部分(即,没有时间部分),结果是一个DATE值。否则结果是一个DATETIME值。

mysql> SELECT "1997-12-31 23:59:59" + INTERVAL 1 SECOND; PHPChina 开源社区门户5\4l J d ` x h

-> 1998-01-01 00:00:00 PHPChina 开源社区门户6j#v ~:j }~

mysql> SELECT INTERVAL 1 DAY + "1997-12-31"; PHPChina 开源社区门户2J j {3v L

-> 1998-01-01

Q4[3D6i Q e k6x.t0mysql> SELECT "1998-01-01" - INTERVAL 1 SECOND; PHPChina 开源社区门户 5Q q dL V F

-> 1997-12-31 23:59:59

6e!i q a I"a s 0mysql> SELECT DATE_ADD("1997-12-31 23:59:59", PHPChina 开源社区门户 d&l b/W i

INTERVAL 1 SECOND);

3s Q [ E-L*O j T.l0-> 1998-01-01 00:00:00

tB E G I N j5x0mysql> SELECT DATE_ADD("1997-12-31 23:59:59", PHPChina 开源社区门户G b4\7} u

INTERVAL 1 DAY); PHPChina 开源社区门户#g;l&F e h9P

-> 1998-01-01 23:59:59

$T R X,o5E&S z c ] V0mysql> SELECT DATE_ADD("1997-12-31 23:59:59", PHPChina 开源社区门户 _ @ { h Q B'Q%\ V(}8T

INTERVAL "1:1" MINUTE_SECOND); PHPChina 开源社区门户;\9H3F+g y Y q7L N

-> 1998-01-01 00:01:00 PHPChina 开源社区门户"Q L M)D0X ` l

mysql> SELECT DATE_SUB("1998-01-01 00:00:00",

9t;~.w h&} H Z0INTERVAL "1 1:1:1" DAY_SECOND);

'a'z2N J J l u+V w i0-> 1997-12-30 22:58:59

5B2V I o r 0mysql> SELECT DATE_ADD("1998-01-01 00:00:00", PHPChina 开源社区门户*^:y j8_1e"L(W H.[

INTERVAL "-1 10" DAY_HOUR);

R:U"g \ i6a z H3S0-> 1997-12-30 14:00:00 PHPChina 开源社区门户5z9z#r+h C m

mysql> SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY);

p,f9^A J N C%W P R0-> 1997-12-02 PHPChina 开源社区门户 r w @/x B D/b c

mysql> SELECT EXTRACT(YEAR FROM "1999-07-02");

U H d v9}'T r j0-> 1999

} Z5k \ m ]0mysql> SELECT EXTRACT(YEAR_MONTH FROM "1999-07-02 01:02:03"); PHPChina 开源社区门户 f m D q H ` ~0G L

-> 199907 PHPChina 开源社区门户"L Y m"B y-t n h

mysql> SELECT EXTRACT(DAY_MINUTE FROM "1999-07-02 01:02:03");

\'d2} x K$T0-> 20102

如果你指定太短的间隔值(不包括type关键词期望的间隔部分),MySQL假设你省掉了间隔值的最左面部分。例如,如果你指定一个type是DAY_SECOND,值expr被希望有天、小时、分钟和秒部分。如果你象"1:10"这样指定值,MySQL假设日子和小时部分是丢失的并且值代表分钟和秒。换句话说,"1:10" DAY_SECOND以它等价于"1:10" MINUTE_SECOND的方式解释,这对那MySQL解释TIME值表示经过的时间而非作为一天的时间的方式有二义性。如果你使用确实不正确的日期,结果是NULL。如果你增加MONTH、YEAR_MONTH或YEAR并且结果日期大于新月份的最大值天数,日子在新月用最大的天调整。

mysql> select DATE_ADD('1998-01-30', Interval 1 month); PHPChina 开源社区门户 a ^ F4Q r U&b S

-> 1998-02-28

注意,从前面的例子中词INTERVAL和type关键词不是区分大小写的。 PHPChina 开源社区门户 E2P F y q z



[ x6X)[ A6@ [4J o0TO_DAYS(date) PHPChina 开源社区门户 T8b i$^ z/e e-w n

给出一个日期date,返回一个天数(从0年的天数)。

M B w S \*E)A5Z c0mysql> select TO_DAYS(950501); PHPChina 开源社区门户 {8] ~5K Y(.B(E

-> 728779 PHPChina 开源社区门户 x([ } o f { w ^

mysql> select TO_DAYS('1997-10-07');

,S b s7K \9g:N0-> 729669

TO_DAYS()PHPChina 开源社区门户7 u d'I9t y x

不打算用于使用格列高里历(1582)出现前的值。

FROM_DAYS(N)

B%s C w z7\ Z0
给出一个天数N,返回一个DATE值。

n b0R+J y0mysql> select FROM_DAYS(729669);

Q8z u F+g J B %A0-> '1997-10-07'

DATE_FORMAT(date,format) PHPChina 开源社区门户+D ` y q w&n

根据format字符串格式化date值。下列修饰符可以被用在format字符串中: %M 月名字(January……December) PHPChina 开源社区门户 \ H'g"v&i

%W 星期名字(Sunday……Saturday)

.U*H:K e%p ~ \0a:w _#V0%D 有英语前缀的月份的日期(1st, 2nd, 3rd, 等等。)

:N2g v j ~ p l,c0%Y 年, 数字, 4 位

p)] c;p p A v-@0%y 年, 数字, 2 位

] y s Y \5v {0%a 缩写的星期名字(Sun……Sat) PHPChina 开源社区门户#v J&r l z A)D u6K

%d 月份中的天数, 数字(00……31) PHPChina 开源社区门户&n J ](d7d- ,[ q0W

%e 月份中的天数, 数字(0……31) PHPChina 开源社区门户$F0P q1{.Y W

%m 月, 数字(01……12)

:g z#_ H5[ n I0%c 月, 数字(1……12)

} k-D%e'u E y m G q+h0%b 缩写的月份名字(Jan……Dec) PHPChina 开源社区门户*B0w @ e W8`

%j 一年中的天数(001……366) PHPChina 开源社区门户!c y$v0[$` v

%H 小时(00……23) PHPChina 开源社区门户 a&^,W k P$K I(y6~

%k 小时(0……23)

.[;r n1v1@9W0%h 小时(01……12)

} a!s7G#R o _0S n9H0I C0%I 小时(01……12)

5LT e0_!@ M S v K*t0%l 小时(1……12) PHPChina 开源社区门户"t5X w R$\ i ^ E'v

%i 分钟, 数字(00……59) PHPChina 开源社区门户 W& a P S4r h

%r 时间,12 小时(hh:mm:ss [AP]M)

_ ] } k*J z } ^"M0%T 时间,24 小时(hh:mm:ss)

S'U(z c p0%S 秒(00……59)

f9x;o \ G0%s 秒(00……59)

4t(n0Y%F/Q j U {0%p AM或PM PHPChina 开源社区门户!r#\ } r j R.O;p

%w 一个星期中的天数(0=Sunday ……6=Saturday )

F V3K"@ M q y/X0%U 星期(0……52), 这里星期天是星期的第一天 PHPChina 开源社区门户 F$O7` e q"l

%u 星期(0……52), 这里星期一是星期的第一天

+H \5G%k.T } g4X$ 2u#]0%% 一个文字“%”。

所有的其他字符不做解释被复制到结果中。

mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y');

n `1y } r#U n&~9N0-> 'Saturday October 1997'

g `1CU':b0mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s');

Q G7z,V#V ~/R'N0-> '22:23:00'

1Z a*^ z8X A)R"P0mysql> select DATE_FORMAT('1997-10-04 22:23:00',

)o%X J&P3-S( @.P Y b0'%D %y %a %d %m %b %j');

p'g l"{ i0-> '4th 97 Sat 04 10 Oct 277'

3A n ` z* { Q X0mysql> select DATE_FORMAT('1997-10-04 22:23:00', PHPChina 开源社区门户 ^ w L z%p f S

'%H %k %I %r %T %S %w');

$L [4a8X L i z X k0-> '22 22 10 10:23:00 PM 22:23:00 00 6'

'V:N a H S)I0MySQL3.23中,在格式修饰符字符前需要%。在MySQL更早的版本中,%是可选的。

TIME_FORMAT(time,format)

Q `!Z B B P5t I:t0这象上面的DATE_FORMAT()函数一样使用,但是format字符串只能包含处理小时、分钟和秒的那些格式修饰符。其他修饰符产生一个NULL值或0。 PHPChina 开源社区门户 k W D:E9R S p G*J u



(@ `(n v k8wJ'N k f y0CURDATE() PHPChina 开源社区门户%i7^ W"g `;F a8X z L ] g

  PHPChina 开源社区门户)W3i c j*e

CURRENT_DATE

4k s,d,h U C7c a0以'YYYY-MM-DD'或YYYYMMDD格式返回今天日期值,取决于函数是在一个字符串还是数字上下文被使用。 PHPChina 开源社区门户 P' l9^ s c%a lg T

mysql> select CURDATE();

+r q w w3x0-> '1997-12-15'

~4i3o2W/V0mysql> select CURDATE() + 0;

*8` O y,U6O)Q f0-> 19971215

CURTIME() PHPChina 开源社区门户 r"k9v \0}%o1x {

 

2o O B 1U Z ot0CURRENT_TIME PHPChina 开源社区门户1y I1_$k x

以'HH:MM:SS'或HHMMSS格式返回当前时间值,取决于函数是在一个字符串还是在数字的上下文被使用。

8k3 R i p-m7e'X r0mysql> select CURTIME();

\:D;A D ~$j k,s#y,I&o0-> '23:50:26'

2k( R4a:P J0mysql> select CURTIME() + 0; PHPChina 开源社区门户 E U V ~ i.e5Z c m h

-> 235026

NOW() PHPChina 开源社区门户 y X2\ dc B

 

#Z k4n3J p9t { k Q;B4g0SYSDATE()

l f }0A ad'@0  PHPChina 开源社区门户0_9B \ D.y#D0Y

CURRENT_TIMESTAMP PHPChina 开源社区门户(E r D S2};a E,U J

以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回当前的日期和时间,取决于函数是在一个字符串还是在数字的上下文被使用。 PHPChina 开源社区门户 w C$d x! g$~"q

mysql> select NOW();

B/Q v Z"R f W \ 0-> '1997-12-15 23:50:26' PHPChina 开源社区门户.R G r*Y _ [ !@ l ~

mysql> select NOW() + 0; PHPChina 开源社区门户 v h Q$r z!}1} n

-> 19971215235026

UNIX_TIMESTAMP() PHPChina 开源社区门户 W9m7F q _$e W h

 

j G+W1{ z F0UNIX_TIMESTAMP(date)

.Y6]/F c p#K7a0
如果没有参数调用,返回一个Unix时间戳记(从'1970-01-01 00:00:00'GMT开始的秒数)。如果UNIX_TIMESTAMP()用一个date参数被调用,它返回从'1970-01-01 00:00:00' GMT开始的秒数值。date可以是一个DATE字符串、一个DATETIME字符串、一个TIMESTAMP或以YYMMDD或YYYYMMDD格式的本地时间的一个数字。 PHPChina 开源社区门户8]&2N ` ,J$S

mysql> select UNIX_TIMESTAMP();

o B"P.~7E3y G0-> 882226357 PHPChina 开源社区门户 V Z;O&c a'a \ ~ V0J y

mysql> select UNIX_TIMESTAMP('1997-10-04 22:23:00'); PHPChina 开源社区门户 p j2[ Q2] X

-> 875996580 PHPChina 开源社区门户4M G n f0} D c:{4S

当UNIX_TIMESTAMP被用于一个TIMESTAMP列,函数将直接接受值,没有隐含的“string-to-unix-timestamp”变换。

FROM_UNIXTIME(unix_timestamp)

b W4W [ P Q)F B g0以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回unix_timestamp参数所表示的值,取决于函数是在一个字符串还是或数字上下文中被使用。 PHPChina 开源社区门户,p9@,Q h4n !R P

mysql> select FROM_UNIXTIME(875996580);

@ l E L I d0-> '1997-10-04 22:23:00'

:c-v Y M(V h @ R y 0mysql> select FROM_UNIXTIME(875996580) + 0;

J [9` u7c D0e0-> 19971004222300

FROM_UNIXTIME(unix_timestamp,format)

Z W I9P g P j J.X [0返回表示 Unix 时间标记的一个字符串,根据format字符串格式化。format可以包含与DATE_FORMAT()函数列出的条目同样的修饰符。 PHPChina 开源社区门户)y k S8i v p

mysql> select FROM_UNIXTIME(UNIX_TIMESTAMP(),

:d"k } L x u X0'%Y %D %M %h:%i:%s %x');

)\7f D ` G'S)I0-> '1997 23rd December 03:43:30 x'

SEC_TO_TIME(seconds)

6K E ] T X z f j O'i0返回seconds参数,变换成小时、分钟和秒,值以'HH:MM:SS'或HHMMSS格式化,取决于函数是在一个字符串还是在数字上下文中被使用。 PHPChina 开源社区门户 Y o z n'n.o

mysql> select SEC_TO_TIME(2378); PHPChina 开源社区门户7e)O C r Q W+l `"y3I e+x

-> '00:39:38'

v1}&r;u$x G!g u E0mysql> select SEC_TO_TIME(2378) + 0; PHPChina 开源社区门户 ~%U2H r s Y

-> 3938

TIME_TO_SEC(time)

L ]"t,@ u d*I#\0返回time参数,转换成秒。

7g `%O%w n*~*D#m0mysql> select TIME_TO_SEC('22:23:00'); PHPChina 开源社区门户 T9j4 A%R

-> 80580 PHPChina 开源社区门户5Y:O F v B u

mysql> select TIME_TO_SEC('00:39:38');

L8.I$h O0-> 2378

2008年4月29日星期二

window.showModalDialog以及window.open用法简介

一、window.open()支持环境: JavaScript1.0+/JScript1.0+/Nav2+/IE3+/Opera3+
二、基本语法:window.open(pageURL,name,parameters)其中:pageURL 为子窗口路径name 为子窗口句柄parameters 为窗口参数(各参数用逗号分隔)
三、示例:
脚本运行后,page.html将在新窗体newwindow中打开,宽为100,高为400,距屏顶0象素,屏左0象素,无工具条,无菜单条,无滚动条,不可调整大小,无地址栏,无状态栏。请对照。
上例中涉及的为常用的几个参数,除此以外还有很多其他参数,请见四。
四、各项参数其中yes/no也可使用1/0;pixel value为具体的数值,单位象素。
参数 取值范围 说明 alwaysLowered yes/no 指定窗口隐藏在所有窗口之后alwaysRaised yes/no 指定窗口悬浮在所有窗口之上depended yes/no 是否和父窗口同时关闭directories yes/no Nav2和3的目录栏是否可见height pixel value 窗口高度hotkeys yes/no 在没菜单栏的窗口中设安全退出热键innerHeight pixel value 窗口中文档的像素高度innerWidth pixel value 窗口中文档的像素宽度location yes/no 位置栏是否可见menubar yes/no 菜单栏是否可见outerHeight pixel value 设定窗口(包括装饰边框)的像素高度outerWidth pixel value 设定窗口(包括装饰边框)的像素宽度resizable yes/no 窗口大小是否可调整screenX pixel value 窗口距屏幕左边界的像素长度screenY pixel value 窗口距屏幕上边界的像素长度scrollbars yes/no 窗口是否可有滚动栏titlebar yes/no 窗口题目栏是否可见toolbar yes/no 窗口工具栏是否可见Width pixel value 窗口的像素宽度z-look yes/no 窗口被激活后是否浮在其它窗口之上
window.showModalDialog使用手册
基本介绍:showModalDialog() (IE 4+ 支持)showModelessDialog() (IE 5+ 支持)window.showModalDialog()方法用来创建一个显示HTML内容的模态对话框。window.showModelessDialog()方法用来创建一个显示HTML内容的非模态对话框。
使用方法:vReturnValue = window.showModalDialog(sURL [, vArguments] [,sFeatures])vReturnValue = window.showModelessDialog(sURL [, vArguments] [,sFeatures])
参数说明:sURL--必选参数,类型:字符串。用来指定对话框要显示的文档的URL。vArguments--可选参数,类型:变体。用来向对话框传递参数。传递的参数类型不限,包括数组等。对话框通过window.dialogArguments来取得传递进来的参数。sFeatures--可选参数,类型:字符串。用来描述对话框的外观等信息,可以使用以下的一个或几个,用分号“;”隔开。1.dialogHeight :对话框高度,不小于100px,IE4中dialogHeight 和 dialogWidth 默认的单位是em,而IE5中是px,为方便其见,在定义modal方式的对话框时,用px做单位。2.dialogWidth: 对话框宽度。3.dialogLeft: 离屏幕左的距离。4.dialogTop: 离屏幕上的距离。5.center: {yes no 1 0 }:窗口是否居中,默认yes,但仍可以指定高度和宽度。6.help: {yes no 1 0 }:是否显示帮助按钮,默认yes。7.resizable: {yes no 1 0 } [IE5+]:是否可被改变大小。默认no。8.status: {yes no 1 0 } [IE5+]:是否显示状态栏。默认为yes[ Modeless]或no[Modal]。9.scroll:{ yes no 1 0 on off }:指明对话框是否显示滚动条。默认为yes。下面几个属性是用在HTA中的,在一般的网页中一般不使用。10.dialogHide:{ yes no 1 0 on off }:在打印或者打印预览时对话框是否隐藏。默认为no。11.edge:{ sunken raised }:指明对话框的边框样式。默认为raised。12.unadorned:{ yes no 1 0 on off }:默认为no。
参数传递:1.要想对话框传递参数,是通过vArguments来进行传递的。类型不限制,对于字符串类型,最大为4096个字符。也可以传递对象,例如:-------------------------------parent.htm
modal.htm
-------------------------------2.可以通过window.returnValue向打开对话框的窗口返回信息,当然也可以是对象。例如:------------------------------parent.htm
modal.htm

币种定义部分
var psAddStr="ProcessID="+ProcessID+"&AddFlag="+isAddFlag+"&BZBH="+vsBZBH+"&BZMC="+vsBZMC+"&BZFH="+vsBZFH+"&JD="+vsJD;
var Result=window.showModalDialog("addSave.asp?"+psAddStr,'',"dialogHeight:250px;dialogWidth:250px;status:no;");

转:子窗口刷新父窗口的问题

情况:用window.open()打开子窗口时候,如果子窗口要得到父窗口页面的某一个值,有两种办法:第一种将父窗口的那个值保存到formbean中然后在子窗口中用隐藏域得到,第二种就是在子窗口中用window.opener.document.getElementById("").value;

此时在子窗口做了某些操作要刷新父窗口,可以用window.opener.document.location.reload();来刷新父窗口.

注意:有时候用上面的方法刷新父页面的时候会出现个“重试”跟 “取消”的对话框!所以用以下代码可以解决:

window.opener.location.href=window.opener.location.href;



如果用showModalDialog模式窗口的话,父页面中要在参数中写明要传输的对象。例如:

window.showModalDialog("/abc.do?method=list"&typeId="+typeId+"&time=<%=new java.util.Date().getTime() %>",window,
"center:yes;dialogHeight:505px;dialogWidth:630px;toolbar:no;menubar:no;scrollbars:no;resizable:no;location:no;status:no;");

其中"window"就为要传输的对象,意思是将父页面的的整个对象传输到子页面里去。

所以在(如果父页面调模式窗口)子页面中就可以用window.dialogArguments来接受父页面传输过来的参数。

window.dialogArguments.document.forms[0].xxx.value;

来或许父页面的任何值。

2007年8月1日星期三

java发邮件

<%@ page contentType="text/html; charset=gb2312" pageEncoding="gb2312"%>
<%@ page import="java.util.Date" %>
<%@ page import="java.util.Properties" %>
<%@ page import="javax.mail.Address" %>
<%@ page import="javax.mail.Message" %>
<%@ page import="javax.mail.MessagingException" %>
<%@ page import="javax.mail.Session" %>
<%@ page import="javax.mail.Transport" %>
<%@ page import="javax.mail.internet.InternetAddress" %>
<%@ page import="javax.mail.internet.MimeMessage" %>
<%@ page import="rewin.ECSN.ejb.info.Information" %>
<%!
/**
需要预先设置的公共变量
public final String mail_email = "flylfx@163.com";
public final String mail_username = "flylfx";
public final String mail_password = "870121" ; //
public final String mail_smtp = "smtp.163.com"; //发送邮件服务器smtp

参数
mailForm 发件人邮件地址
mailTo 收件人
mailSubject 邮件主题
mailContent 邮件内容
*/
public boolean sendMail(String mailForm,String mailTo,String mailSubject,String mailContent){
boolean flag = false;//标记邮件是否发送成功
try{
Properties props=new Properties();//也可用Properties props = System.getProperties();
//props.put("mail.smtp.host","smtp.xyzq.com.cn");//存储发送邮件服务器的信息

props.put("mail.smtp.host","61.154.12.91");//存储发送邮件服务器的信息

props.put("mail.smtp.auth","true");//同时通过验证
Session s = Session.getInstance(props,null);//根据属性新建一个邮件会话,null参数是一种Authenticator(验证程序) 对象
s.setDebug(true);
Message message=new MimeMessage(s);//由邮件会话新建一个消息对象
InternetAddress from=new InternetAddress("lcfwzx@xyzq.com.cn");//发件人的邮件地址
try{
from.setPersonal(mailForm);
}catch(Exception e){
e.printStackTrace();
}
message.setFrom(from);//设置发件人
//Address to=new InternetAddress(jlMail);//收件人的邮件地址
Address to = new InternetAddress(mailTo);//收件人的邮件地址
message.setRecipient(Message.RecipientType.TO,to);//设置收件人,并设置其接收类型为TO
message.setSubject(mailSubject);//设置主题
message.setText(mailContent);//设置信件内容
message.setSentDate(new Date());//设置发信时间
message.saveChanges();//存储邮件信息
Transport transport=s.getTransport("smtp");
//transport.connect("smtp.xyzq.com.cn","lcfwzx","vten234*()");//以smtp方式登录邮箱

transport.connect("61.154.12.91","lcfwzx","vten234*()");//以smtp方式登录邮箱

transport.sendMessage(message,message.getAllRecipients());//发送邮件,其中第二个参数是所有已设好的收件人地址
transport.close();
flag = true;
}catch(Exception e){
flag = false;
e.printStackTrace();
}
System.out.print(flag);
return flag;
}
%>
<%
out.println(sendMail("rewin","lifx@rewin.com.cn","邮件测试","邮件测试"));
%>

2007年5月22日星期二

[转]死了都不卖






虽然亢奋,但“楼上”的动静总是为人关注的,因为万一掉下块石头,便难免砸伤“楼下”的人,不管他是否亢奋。


 


头一次,温柔的央行扔了只“袜子”,众人大笑:“吓唬谁啊,顶多也就有点臭!”果然,股市大涨,让众人觉得解气;然后,证监会又抛出一句狠话,警告市场要小心“严打”,众人复大笑:“当我们是傻子啊,风险还用你说?严打你倒是镇住杭萧啊,小样儿!”其后股市续涨,继续对酒当歌,不仅有大教授担心“不入股市会一辈子贫困”,而且股指也继续摆出一副“踏平5000点”的样子。


 


这时,央行又出手了,且扔出的“鞋子”,还不止一对。于是有人担心了,怕“泡沫颂”唱错了时点从而像孟姜女的哭声一样震塌了“长城”,怕“不会崩盘也不会逆转”的股市遭遇“十大利空”。但缓过神后,立刻便有人指责央行“敲山震虎”的政策是“南辕北辙”,也有人搬出了美国加息数次股市仍大涨的例子给人们鼓气,更有“股市艺术奇才”及时创作了全球独一无二的“名曲”,歌名就叫“死了都不卖”,高歌“凭感觉就买入赚钱就会很愉快”,还真把国人“炒股”的精髓炒得淋漓尽致,直让证监会闻讯无语,让周行长听后岔气,恨不得捂着胸口也要再说一句“股市的事不归我管”!


 


然而,他管了(当然真管的并不全是他),不仅管了,而且使的是组合拳,还破天荒地拿银行的命根子开刀,在存贷款利息的增加幅度上动了真格的。这下,银行慌了,所以据报工行便也破天荒地在银行间拆借市场大笔拆入资金而不是拆出,搞得一向“富裕”的银行们行行紧张。更慌的是股市,因为银行的传统盈利模式一旦遭到冲击,则银行股的预期便会转向,而他们,可是经济学家眼里“结构性泡沫”的最大“支柱”。


 


这“刀”还有点力度,难怪期铜会连续跌停,我说,尽管放眼望去,周围还有不少“死了都不卖”的“炒股艺术家”!


 


不过,也是的,整个“楼下”的大都喝高了“乔帮主”酿就的高价“茅台好酒”,喝得最酣的,肯定是最幸福最牛气的啊。酒场上如此,如今的股市又何尝不是?我既深忧,能奈之何?


 


还是先来听听“名曲”《死了都不卖》吧,那嗓门,那气势,那歌词,真可以气死巴菲特,羞煞索罗斯,听呆李嘉诚!


这,才是深具中国特色的“艺术”啊,这,才是堪称酒肆“神曲”的“巅峰之作”啊,太有才了!——“2008春晚”候选?





       把股票当成是投资才买来
  一涨一跌都不会害怕掉下来
  不理会大盘是看好或看坏
  只要你翻倍我才卖
    
  我不听别人安排
  凭感觉就买入赚钱就会很愉快
  享受现在别一套牢就怕受失败
  许多奇迹中国股市永远存在
    
  死了都不卖
  不给我翻倍不痛快
  我们散户只有这样才不被打败
  死了都不卖
  不涨到心慌不痛快
  投资中国心永在
    
  就算深套也不卖
  不等到暴涨不痛快
  你会明白卖会责怪
  心态会变坏
  到顶部都不卖
  做股民就要不摇摆
  不怕套牢或摘牌
  股票终究有未来

2007年5月21日星期一

一个人是快乐的,两个人是幸福的,半个人是寂寞的

一个人是快乐的,在没有遇到另一个人的时候...
一个人可以随心情的欺负而抱怨天气的变化....
一个人可以自由的去击破蓝天而不用担心自己的羽翼...
一个人可以开心的看着别人的眼泪而不用担心自己的泪水....
一个人可以呼呼的睡觉而不用考虑浪费时间....
一个人可以不用考虑人情味的存在而禁锢自己的思想....
一个人可以把天分成两半而不用考虑天会塌下来....
两个人是幸福的,在一个人和另一个人的心重叠时...
两个人可以互相搀扶数着天上的星星而不用考虑事情的烦琐....
两个人可以共同创造快乐而不用担心忧伤的侵袭.....
两个人可以一起欣赏风景而不用担心风景的语言空白.....
两个人可以彼此倾诉而不用担心自言自语的孤单......
两个人可以品尝爱的滋味而不用担心自己会演化成冰冷的石头....
半个人是寂寞的,当一个人的心被另一个人带走时.....
半个人只能数着黑夜的眼睛去回味曾经........
半个人只能发呆在风景面前去体会寂寞......
半个人只能计数着时间去接受忍耐的缓慢....
半个人 只能灌着酒精去麻醉自己的记忆.....
半个人只能拿着电话筒却不担再去寻找失去的心......
半个人只能带着半只翅膀顶过风雨.....
半个人只能填饱独自却不能给空白的心填上颜色...
半个人只能独自忍受不能黏合的玻璃碎片蛰出的血泪......

2007年4月28日星期六

SQL Server 中日期加减的方法

SELECT datediff(day,DOC_RYGL_YGDA.RZSJ,getdate()) AS day ,
datediff(month,DOC_RYGL_YGDA.RZSJ,getdate()) as month ,
datediff(year,DOC_RYGL_YGDA.RZSJ,getdate()) as year
FROM DBO.DOC_RYGL_YGDA DOC_RYGL_YGDA

2007年4月9日星期一

ACCESS中的日期查询

注意:ACCESS中的日期时间分隔符是#而不是引号
Select * From Tab1 Where [Date]>#2002-1-1#;

2007年3月29日星期四

blog恢复了

google 的blog终于又可以用了,狂喜。。。

2007年3月23日星期五

用javascript向table中插入行和删除行

<SCRIPT>
var cInput
function fnAppend(obj)
{
var arr = new Array(5);
arr[0] = "txtA";
arr[1] = "txtB";
arr[2] = "txtC";
arr[3] = "txtD";
arr[4] = "txtE";

//alert(obj.value);
for(var i=0;i<parseInt(obj.value);i++)
{
var trHeader = tbl1.insertRow();
for(var j=1;j<4;j++){
var tdHeader =trHeader.insertCell();
var obj1 = document.createElement("INPUT");
obj1.type = "text";
obj1.name = arr[j]+i;
obj1.onfocus=function(){cInput=this}
tdHeader.appendChild(obj1);
}
var tdHeader2 = trHeader.insertCell();
var obj2 = document.createElement("select");
for(var j=1;j<4;j++){
var objOption = document.createElement("option");
objOption.value = j;
objOption.innerText = "Item " + j;
obj2.insertBefore(objOption,null);
}
obj2.name = "test"+i;
obj2.onfocus=function(){cInput=this}
tdHeader2.appendChild(obj2);
}
}
function document.onmousemove()
{
window.status = "控件 name : "+ event.srcElement.name;
}

//function
function delRow(){
if (cInput!=undefined){
var myTr=getParent(cInput,"TR")
if (myTr!=false){
myTr.parentElement.removeChild(myTr)
cInput=undefined
}
}
}

function getParent(myElement,myTagName){
if (myElement.tagName=="BODY") {return false}
if (myElement.tagName==myTagName){
return myElement;
}
else{return getParent(myElement.parentElement,myTagName)}
}
</SCRIPT>
<BODY>
<INPUT TYPE = "button" VALUE = "5" onclick = "fnAppend(this)" name="button1">
<input type="button" value="点击某一行的任何一个INPUT,然后删除该行" onclick="delRow()">
<form name="form1">

<table id="tbl1" border="1">
</table>

</form>

设置JSP的编码

<%@ page contentType="text/html;charset=GB2312" %>
request.setCharacterEncoding("GBK");

2007年3月9日星期五

Oracle 复制表的Sql

create table tablexxx as select * from tableyyy

create table tablexxx as select * from tableyyy where 1 <> 1

2007年3月7日星期三

Oracle的左连接和右连接

在Oracle PL-SQL中,左连接和右连接以如下方式来实现
查看如下语句:
SELECT emp_name, dept_name
FORM Employee, Department
WHERE Employee.emp_deptid(+) = Department.deptid此SQL文使用了右连接,即“(+)”所在位置的另一侧为连接的方向,右连接说明等号右侧的所有记录均会被显示,无论其在左侧是否得到匹配,也就是说上例中无论会不会出现某个部门没有一个员工的情况,这个部门的名字都会在查询结果中出现。
反之:
SELECT emp_name, dept_name
FORM Employee, Department
WHERE Employee.emp_deptid = Department.deptid(+)则是左连接,无论这个员工有没有一个能在Department表中得到匹配的部门号,这个员工的记录都会被显示 。

2007年3月6日星期二

Oracle时间日期操作

Oracle时间日期操作
sysdate+(5/24/60/60) 在系统时间基础上延迟5秒
sysdate+5/24/60 在系统时间基础上延迟5分钟
sysdate+5/24 在系统时间基础上延迟5小时
sysdate+5 在系统时间基础上延迟5天
add_months(sysdate,-5) 在系统时间基础上延迟5月
add_months(sysdate,-5*12) 在系统时间基础上延迟5年


上月末的日期:select last_day(add_months(sysdate, -1)) from dual;
本月的最后一秒:select trunc(add_months(sysdate,1),'MM') - 1/24/60/60 from dual
本周星期一的日期:select trunc(sysdate,'day')+1 from dual


年初至今的天数:select ceil(sysdate - trunc(sysdate, 'year')) from dual;

今天是今年的第几周 :select to_char(sysdate,'fmww') from dual
今天是本月的第几周:SELECT TO_CHAR(SYSDATE,'WW') - TO_CHAR(TRUNC(SYSDATE,'MM'),'WW') + 1 AS "weekOfMon" FROM dual

本月的天数
SELECT to_char(last_day(SYSDATE),'dd') days FROM dual
今年的天数
select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual
下个星期一的日期
SELECT Next_day(SYSDATE,'monday') FROM dual


============================================

--计算工作日方法

create table t(s date,e date);
alter session set nls_date_format = 'yyyy-mm-dd';
insert into t values('2003-03-01','2003-03-03');
insert into t values('2003-03-02','2003-03-03');
insert into t values('2003-03-07','2003-03-08');
insert into t values('2003-03-07','2003-03-09');
insert into t values('2003-03-05','2003-03-07');
insert into t values('2003-02-01','2003-03-31');

-- 这里假定日期都是不带时间的,否则在所有日期前加trunc即可。
select s,e,e-s+1 total_days,
trunc((e-s+1)/7)*5 + length(replace(substr('01111100111110',to_char(s,'d'),mod(e-s+1,7)),'0','')) work_days
from t;

-- drop table t;

引此:http://www.itpub.net/showthread.php?s=1635506cd5f48b1bc3adbe4cde96f227&threadid=104060&perpage=15&pagenumber=1


================================================================================

判断当前时间是上午下午还是晚上

SELECT CASE
WHEN to_number(to_char(SYSDATE,'hh24')) BETWEEN 6 AND 11 THEN '上午'
WHEN to_number(to_char(SYSDATE,'hh24')) BETWEEN 11 AND 17 THEN '下午'
WHEN to_number(to_char(SYSDATE,'hh24')) BETWEEN 17 AND 21 THEN '晚上'
END
FROM dual;


================================================================================

Oracle 中的一些处理日期



将数字转换为任意时间格式.如秒:需要转换为天/小时
SELECT to_char(floor(TRUNC(936000/(60*60))/24))||'天'||to_char(mod(TRUNC(936000/(60*60)),24))||'小时' FROM DUAL


TO_DATE格式
Day:
dd number 12
dy abbreviated fri
day spelled out friday
ddspth spelled out, ordinal twelfth
Month:
mm number 03
mon abbreviated mar
month spelled out march
Year:
yy two digits 98
yyyy four digits 1998

24小时格式下时间范围为: 0:00:00 - 23:59:59....
12小时格式下时间范围为: 1:00:00 - 12:59:59 ....
1.
日期和字符转换函数用法(to_date,to_char)

2.
select to_char( to_date(222,'J'),'Jsp') from dual

显示Two Hundred Twenty-Two

3.
求某天是星期几
select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual;
星期一
select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;
monday
设置日期语言
ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';
也可以这样
TO_DATE ('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE = American')

4.
两个日期间的天数
select floor(sysdate - to_date('20020405','yyyymmdd')) from dual;

5. 时间为null的用法
select id, active_date from table1
UNION
select 1, TO_DATE(null) from dual;

注意要用TO_DATE(null)

6.
a_date between to_date('20011201','yyyymmdd') and to_date('20011231','yyyymmdd')
那么12月31号中午12点之后和12月1号的12点之前是不包含在这个范围之内的。
所以,当时间需要精确的时候,觉得to_char还是必要的
7. 日期格式冲突问题
输入的格式要看你安装的ORACLE字符集的类型, 比如: US7ASCII, date格式的类型就是: '01-Jan-01'
alter system set NLS_DATE_LANGUAGE = American
alter session set NLS_DATE_LANGUAGE = American
或者在to_date中写
select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;
注意我这只是举了NLS_DATE_LANGUAGE,当然还有很多,
可查看
select * from nls_session_parameters
select * from V$NLS_PARAMETERS

8.
select count(*)
from ( select rownum-1 rnum
from all_objects
where rownum <= to_date('2002-02-28','yyyy-mm-dd') - to_date('2002-
02-01','yyyy-mm-dd')+1
)
where to_char( to_date('2002-02-01','yyyy-mm-dd')+rnum-1, 'D' )
not
in ( '1', '7' )

查找2002-02-28至2002-02-01间除星期一和七的天数
在前后分别调用DBMS_UTILITY.GET_TIME, 让后将结果相减(得到的是1/100秒, 而不是毫秒).

9.
select months_between(to_date('01-31-1999','MM-DD-YYYY'),
to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;
1

select months_between(to_date('02-01-1999','MM-DD-YYYY'),
to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;

1.03225806451613
10. Next_day的用法
Next_day(date, day)

Monday-Sunday, for format code DAY
Mon-Sun, for format code DY
1-7, for format code D

11
select to_char(sysdate,'hh:mi:ss') TIME from all_objects
注意:第一条记录的TIME 与最后一行是一样的
可以建立一个函数来处理这个问题
create or replace function sys_date return date is
begin
return sysdate;
end;

select to_char(sys_date,'hh:mi:ss') from all_objects;
12.
获得小时数

SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 2:38:40') from offer
SQL> select sysdate ,to_char(sysdate,'hh') from dual;

SYSDATE TO_CHAR(SYSDATE,'HH')
-------------------- ---------------------
2003-10-13 19:35:21 07

SQL> select sysdate ,to_char(sysdate,'hh24') from dual;

SYSDATE TO_CHAR(SYSDATE,'HH24')
-------------------- -----------------------
2003-10-13 19:35:21 19

获取年月日与此类似
13.
年月日的处理
select older_date,
newer_date,
years,
months,
abs(
trunc(
newer_date-
add_months( older_date,years*12+months )
)
) days
from ( select
trunc(months_between( newer_date, older_date )/12) YEARS,
mod(trunc(months_between( newer_date, older_date )),
12 ) MONTHS,
newer_date,
older_date
from ( select hiredate older_date,
add_months(hiredate,rownum)+rownum newer_date
from emp )
)

14.
处理月份天数不定的办法
select to_char(add_months(last_day(sysdate) +1, -2), 'yyyymmdd'),last_day(sysdate) from dual

16.
找出今年的天数
select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual

闰年的处理方法
to_char( last_day( to_date('02' ¦ ¦ :year,'mmyyyy') ), 'dd' )
如果是28就不是闰年

17.
yyyy与rrrr的区别
'YYYY99 TO_C
------- ----
yyyy 99 0099
rrrr 99 1999
yyyy 01 0001
rrrr 01 2001

18.不同时区的处理
select to_char( NEW_TIME( sysdate, 'GMT','EST'), 'dd/mm/yyyy hh:mi:ss') ,sysdate
from dual;

19.
5秒钟一个间隔
Select TO_DATE(FLOOR(TO_CHAR(sysdate,'SSSSS')/300) * 300,'SSSSS') ,TO_CHAR(sysdate,'SSSSS')
from dual

2002-11-1 9:55:00 35786
SSSSS表示5位秒数

20.
一年的第几天
select TO_CHAR(SYSDATE,'DDD'),sysdate from dual
310 2002-11-6 10:03:51

21.计算小时,分,秒,毫秒
select
Days,
A,
TRUNC(A*24) Hours,
TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes,
TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds,
TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSeconds
from
(
select
trunc(sysdate) Days,
sysdate - trunc(sysdate) A
from dual
)



select * from tabname
order by decode(mode,'FIFO',1,-1)*to_char(rq,'yyyymmddhh24miss');

//
floor((date2-date1) /365) 作为年
floor((date2-date1, 365) /30) 作为月
mod(mod(date2-date1, 365), 30)作为日.
23.next_day函数
next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。
1 2 3 4 5 6 7
日 一 二 三 四 五 六

---------------------------------------------------------------

select (sysdate-to_date('2003-12-03 12:55:45','yyyy-mm-dd hh24:mi:ss'))*24*60*60 from dual
日期 返回的是天 然后 转换为ss


转此:http://www.onlinedatabase.cn/leadbbs/Announce/Announce.asp?BoardID=42&ID=1769


将数字转换为任意时间格式.如秒:需要转换为天/小时
SELECT to_char(floor(TRUNC(936000/(60*60))/24))||'天'||to_char(mod(TRUNC(936000/(60*60)),24))||'小时' FROM DUAL


TO_DATE格式
Day:
dd number 12
dy abbreviated fri
day spelled out friday
ddspth spelled out, ordinal twelfth
Month:
mm number 03
mon abbreviated mar
month spelled out march
Year:
yy two digits 98
yyyy four digits 1998

24小时格式下时间范围为: 0:00:00 - 23:59:59....
12小时格式下时间范围为: 1:00:00 - 12:59:59 ....
1.
日期和字符转换函数用法(to_date,to_char)

2.
select to_char( to_date(222,'J'),'Jsp') from dual

显示Two Hundred Twenty-Two

3.
求某天是星期几
select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual;
星期一
select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;
monday
设置日期语言
ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';
也可以这样
TO_DATE ('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE = American')

4.
两个日期间的天数
select floor(sysdate - to_date('20020405','yyyymmdd')) from dual;

5. 时间为null的用法
select id, active_date from table1
UNION
select 1, TO_DATE(null) from dual;

注意要用TO_DATE(null)

6.
a_date between to_date('20011201','yyyymmdd') and to_date('20011231','yyyymmdd')
那么12月31号中午12点之后和12月1号的12点之前是不包含在这个范围之内的。
所以,当时间需要精确的时候,觉得to_char还是必要的
7. 日期格式冲突问题
输入的格式要看你安装的ORACLE字符集的类型, 比如: US7ASCII, date格式的类型就是: '01-Jan-01'
alter system set NLS_DATE_LANGUAGE = American
alter session set NLS_DATE_LANGUAGE = American
或者在to_date中写
select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;
注意我这只是举了NLS_DATE_LANGUAGE,当然还有很多,
可查看
select * from nls_session_parameters
select * from V$NLS_PARAMETERS

8.
select count(*)
from ( select rownum-1 rnum
from all_objects
where rownum <= to_date('2002-02-28','yyyy-mm-dd') - to_date('2002-
02-01','yyyy-mm-dd')+1
)
where to_char( to_date('2002-02-01','yyyy-mm-dd')+rnum-1, 'D' )
not
in ( '1', '7' )

查找2002-02-28至2002-02-01间除星期一和七的天数
在前后分别调用DBMS_UTILITY.GET_TIME, 让后将结果相减(得到的是1/100秒, 而不是毫秒).

9.
select months_between(to_date('01-31-1999','MM-DD-YYYY'),
to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;
1

select months_between(to_date('02-01-1999','MM-DD-YYYY'),
to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;

1.03225806451613
10. Next_day的用法
Next_day(date, day)

Monday-Sunday, for format code DAY
Mon-Sun, for format code DY
1-7, for format code D

11
select to_char(sysdate,'hh:mi:ss') TIME from all_objects
注意:第一条记录的TIME 与最后一行是一样的
可以建立一个函数来处理这个问题
create or replace function sys_date return date is
begin
return sysdate;
end;

select to_char(sys_date,'hh:mi:ss') from all_objects;
12.
获得小时数

SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 2:38:40') from offer
SQL> select sysdate ,to_char(sysdate,'hh') from dual;

SYSDATE TO_CHAR(SYSDATE,'HH')
-------------------- ---------------------
2003-10-13 19:35:21 07

SQL> select sysdate ,to_char(sysdate,'hh24') from dual;

SYSDATE TO_CHAR(SYSDATE,'HH24')
-------------------- -----------------------
2003-10-13 19:35:21 19

获取年月日与此类似
13.
年月日的处理
select older_date,
newer_date,
years,
months,
abs(
trunc(
newer_date-
add_months( older_date,years*12+months )
)
) days
from ( select
trunc(months_between( newer_date, older_date )/12) YEARS,
mod(trunc(months_between( newer_date, older_date )),
12 ) MONTHS,
newer_date,
older_date
from ( select hiredate older_date,
add_months(hiredate,rownum)+rownum newer_date
from emp )
)

14.
处理月份天数不定的办法
select to_char(add_months(last_day(sysdate) +1, -2), 'yyyymmdd'),last_day(sysdate) from dual

16.
找出今年的天数
select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual

闰年的处理方法
to_char( last_day( to_date('02' ¦ ¦ :year,'mmyyyy') ), 'dd' )
如果是28就不是闰年

17.
yyyy与rrrr的区别
'YYYY99 TO_C
------- ----
yyyy 99 0099
rrrr 99 1999
yyyy 01 0001
rrrr 01 2001

18.不同时区的处理
select to_char( NEW_TIME( sysdate, 'GMT','EST'), 'dd/mm/yyyy hh:mi:ss') ,sysdate
from dual;

19.
5秒钟一个间隔
Select TO_DATE(FLOOR(TO_CHAR(sysdate,'SSSSS')/300) * 300,'SSSSS') ,TO_CHAR(sysdate,'SSSSS')
from dual

2002-11-1 9:55:00 35786
SSSSS表示5位秒数

20.
一年的第几天
select TO_CHAR(SYSDATE,'DDD'),sysdate from dual
310 2002-11-6 10:03:51

21.计算小时,分,秒,毫秒
select
Days,
A,
TRUNC(A*24) Hours,
TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes,
TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds,
TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSeconds
from
(
select
trunc(sysdate) Days,
sysdate - trunc(sysdate) A
from dual
)



select * from tabname
order by decode(mode,'FIFO',1,-1)*to_char(rq,'yyyymmddhh24miss');

//
floor((date2-date1) /365) 作为年
floor((date2-date1, 365) /30) 作为月
mod(mod(date2-date1, 365), 30)作为日.
23.next_day函数
next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。
1 2 3 4 5 6 7
日 一 二 三 四 五 六

---------------------------------------------------------------

select (sysdate-to_date('2003-12-03 12:55:45','yyyy-mm-dd hh24:mi:ss'))*24*60*60 from dual
日期 返回的是天 然后 转换为ss


转此:http://www.onlinedatabase.cn/leadbbs/Announce/Announce.asp?BoardID=42&ID=1769


将数字转换为任意时间格式.如秒:需要转换为天/小时
SELECT to_char(floor(TRUNC(936000/(60*60))/24))||'天'||to_char(mod(TRUNC(936000/(60*60)),24))||'小时' FROM DUAL


TO_DATE格式
Day:
dd number 12
dy abbreviated fri
day spelled out friday
ddspth spelled out, ordinal twelfth
Month:
mm number 03
mon abbreviated mar
month spelled out march
Year:
yy two digits 98
yyyy four digits 1998

24小时格式下时间范围为: 0:00:00 - 23:59:59....
12小时格式下时间范围为: 1:00:00 - 12:59:59 ....
1.
日期和字符转换函数用法(to_date,to_char)

2.
select to_char( to_date(222,'J'),'Jsp') from dual

显示Two Hundred Twenty-Two

3.
求某天是星期几
select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual;
星期一
select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;
monday
设置日期语言
ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';
也可以这样
TO_DATE ('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE = American')

4.
两个日期间的天数
select floor(sysdate - to_date('20020405','yyyymmdd')) from dual;

5. 时间为null的用法
select id, active_date from table1
UNION
select 1, TO_DATE(null) from dual;

注意要用TO_DATE(null)

6.
a_date between to_date('20011201','yyyymmdd') and to_date('20011231','yyyymmdd')
那么12月31号中午12点之后和12月1号的12点之前是不包含在这个范围之内的。
所以,当时间需要精确的时候,觉得to_char还是必要的
7. 日期格式冲突问题
输入的格式要看你安装的ORACLE字符集的类型, 比如: US7ASCII, date格式的类型就是: '01-Jan-01'
alter system set NLS_DATE_LANGUAGE = American
alter session set NLS_DATE_LANGUAGE = American
或者在to_date中写
select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;
注意我这只是举了NLS_DATE_LANGUAGE,当然还有很多,
可查看
select * from nls_session_parameters
select * from V$NLS_PARAMETERS

8.
select count(*)
from ( select rownum-1 rnum
from all_objects
where rownum <= to_date('2002-02-28','yyyy-mm-dd') - to_date('2002-
02-01','yyyy-mm-dd')+1
)
where to_char( to_date('2002-02-01','yyyy-mm-dd')+rnum-1, 'D' )
not
in ( '1', '7' )

查找2002-02-28至2002-02-01间除星期一和七的天数
在前后分别调用DBMS_UTILITY.GET_TIME, 让后将结果相减(得到的是1/100秒, 而不是毫秒).

9.
select months_between(to_date('01-31-1999','MM-DD-YYYY'),
to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;
1

select months_between(to_date('02-01-1999','MM-DD-YYYY'),
to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;

1.03225806451613
10. Next_day的用法
Next_day(date, day)

Monday-Sunday, for format code DAY
Mon-Sun, for format code DY
1-7, for format code D

11
select to_char(sysdate,'hh:mi:ss') TIME from all_objects
注意:第一条记录的TIME 与最后一行是一样的
可以建立一个函数来处理这个问题
create or replace function sys_date return date is
begin
return sysdate;
end;

select to_char(sys_date,'hh:mi:ss') from all_objects;
12.
获得小时数

SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 2:38:40') from offer
SQL> select sysdate ,to_char(sysdate,'hh') from dual;

SYSDATE TO_CHAR(SYSDATE,'HH')
-------------------- ---------------------
2003-10-13 19:35:21 07

SQL> select sysdate ,to_char(sysdate,'hh24') from dual;

SYSDATE TO_CHAR(SYSDATE,'HH24')
-------------------- -----------------------
2003-10-13 19:35:21 19

获取年月日与此类似
13.
年月日的处理
select older_date,
newer_date,
years,
months,
abs(
trunc(
newer_date-
add_months( older_date,years*12+months )
)
) days
from ( select
trunc(months_between( newer_date, older_date )/12) YEARS,
mod(trunc(months_between( newer_date, older_date )),
12 ) MONTHS,
newer_date,
older_date
from ( select hiredate older_date,
add_months(hiredate,rownum)+rownum newer_date
from emp )
)

14.
处理月份天数不定的办法
select to_char(add_months(last_day(sysdate) +1, -2), 'yyyymmdd'),last_day(sysdate) from dual

16.
找出今年的天数
select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual

闰年的处理方法
to_char( last_day( to_date('02' ¦ ¦ :year,'mmyyyy') ), 'dd' )
如果是28就不是闰年

17.
yyyy与rrrr的区别
'YYYY99 TO_C
------- ----
yyyy 99 0099
rrrr 99 1999
yyyy 01 0001
rrrr 01 2001

18.不同时区的处理
select to_char( NEW_TIME( sysdate, 'GMT','EST'), 'dd/mm/yyyy hh:mi:ss') ,sysdate
from dual;

19.
5秒钟一个间隔
Select TO_DATE(FLOOR(TO_CHAR(sysdate,'SSSSS')/300) * 300,'SSSSS') ,TO_CHAR(sysdate,'SSSSS')
from dual

2002-11-1 9:55:00 35786
SSSSS表示5位秒数

20.
一年的第几天
select TO_CHAR(SYSDATE,'DDD'),sysdate from dual
310 2002-11-6 10:03:51

21.计算小时,分,秒,毫秒
select
Days,
A,
TRUNC(A*24) Hours,
TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes,
TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds,
TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSeconds
from
(
select
trunc(sysdate) Days,
sysdate - trunc(sysdate) A
from dual
)



select * from tabname
order by decode(mode,'FIFO',1,-1)*to_char(rq,'yyyymmddhh24miss');

//
floor((date2-date1) /365) 作为年
floor((date2-date1, 365) /30) 作为月
mod(mod(date2-date1, 365), 30)作为日.
23.next_day函数
next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。
1 2 3 4 5 6 7
日 一 二 三 四 五 六

---------------------------------------------------------------

select (sysdate-to_date('2003-12-03 12:55:45','yyyy-mm-dd hh24:mi:ss'))*24*60*60 from dual
日期 返回的是天 然后 转换为ss

转此:http://www.onlinedatabase.cn/leadbbs/Announce/Announce.asp?BoardID=42&ID=1769

将数字转换为任意时间格式.如秒:需要转换为天/小时
SELECT to_char(floor(TRUNC(936000/(60*60))/24))||'天'||to_char(mod(TRUNC(936000/(60*60)),24))||'小时' FROM DUAL


TO_DATE格式
Day:
dd number 12
dy abbreviated fri
day spelled out friday
ddspth spelled out, ordinal twelfth
Month:
mm number 03
mon abbreviated mar
month spelled out march
Year:
yy two digits 98
yyyy four digits 1998

24小时格式下时间范围为: 0:00:00 - 23:59:59....
12小时格式下时间范围为: 1:00:00 - 12:59:59 ....
1.
日期和字符转换函数用法(to_date,to_char)

2.
select to_char( to_date(222,'J'),'Jsp') from dual

显示Two Hundred Twenty-Two

3.
求某天是星期几
select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual;
星期一
select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;
monday
设置日期语言
ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';
也可以这样
TO_DATE ('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE = American')

4.
两个日期间的天数
select floor(sysdate - to_date('20020405','yyyymmdd')) from dual;

5. 时间为null的用法
select id, active_date from table1
UNION
select 1, TO_DATE(null) from dual;

注意要用TO_DATE(null)

6.
a_date between to_date('20011201','yyyymmdd') and to_date('20011231','yyyymmdd')
那么12月31号中午12点之后和12月1号的12点之前是不包含在这个范围之内的。
所以,当时间需要精确的时候,觉得to_char还是必要的
7. 日期格式冲突问题
输入的格式要看你安装的ORACLE字符集的类型, 比如: US7ASCII, date格式的类型就是: '01-Jan-01'
alter system set NLS_DATE_LANGUAGE = American
alter session set NLS_DATE_LANGUAGE = American
或者在to_date中写
select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;
注意我这只是举了NLS_DATE_LANGUAGE,当然还有很多,
可查看
select * from nls_session_parameters
select * from V$NLS_PARAMETERS

8.
select count(*)
from ( select rownum-1 rnum
from all_objects
where rownum <= to_date('2002-02-28','yyyy-mm-dd') - to_date('2002-
02-01','yyyy-mm-dd')+1
)
where to_char( to_date('2002-02-01','yyyy-mm-dd')+rnum-1, 'D' )
not
in ( '1', '7' )

查找2002-02-28至2002-02-01间除星期一和七的天数
在前后分别调用DBMS_UTILITY.GET_TIME, 让后将结果相减(得到的是1/100秒, 而不是毫秒).

9.
select months_between(to_date('01-31-1999','MM-DD-YYYY'),
to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;
1

select months_between(to_date('02-01-1999','MM-DD-YYYY'),
to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;

1.03225806451613
10. Next_day的用法
Next_day(date, day)

Monday-Sunday, for format code DAY
Mon-Sun, for format code DY
1-7, for format code D

11
select to_char(sysdate,'hh:mi:ss') TIME from all_objects
注意:第一条记录的TIME 与最后一行是一样的
可以建立一个函数来处理这个问题
create or replace function sys_date return date is
begin
return sysdate;
end;

select to_char(sys_date,'hh:mi:ss') from all_objects;
12.
获得小时数

SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 2:38:40') from offer
SQL> select sysdate ,to_char(sysdate,'hh') from dual;

SYSDATE TO_CHAR(SYSDATE,'HH')
-------------------- ---------------------
2003-10-13 19:35:21 07

SQL> select sysdate ,to_char(sysdate,'hh24') from dual;

SYSDATE TO_CHAR(SYSDATE,'HH24')
-------------------- -----------------------
2003-10-13 19:35:21 19

获取年月日与此类似
13.
年月日的处理
select older_date,
newer_date,
years,
months,
abs(
trunc(
newer_date-
add_months( older_date,years*12+months )
)
) days
from ( select
trunc(months_between( newer_date, older_date )/12) YEARS,
mod(trunc(months_between( newer_date, older_date )),
12 ) MONTHS,
newer_date,
older_date
from ( select hiredate older_date,
add_months(hiredate,rownum)+rownum newer_date
from emp )
)

14.
处理月份天数不定的办法
select to_char(add_months(last_day(sysdate) +1, -2), 'yyyymmdd'),last_day(sysdate) from dual

16.
找出今年的天数
select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual

闰年的处理方法
to_char( last_day( to_date('02' ¦ ¦ :year,'mmyyyy') ), 'dd' )
如果是28就不是闰年

17.
yyyy与rrrr的区别
'YYYY99 TO_C
------- ----
yyyy 99 0099
rrrr 99 1999
yyyy 01 0001
rrrr 01 2001

18.不同时区的处理
select to_char( NEW_TIME( sysdate, 'GMT','EST'), 'dd/mm/yyyy hh:mi:ss') ,sysdate
from dual;

19.
5秒钟一个间隔
Select TO_DATE(FLOOR(TO_CHAR(sysdate,'SSSSS')/300) * 300,'SSSSS') ,TO_CHAR(sysdate,'SSSSS')
from dual

2002-11-1 9:55:00 35786
SSSSS表示5位秒数

20.
一年的第几天
select TO_CHAR(SYSDATE,'DDD'),sysdate from dual
310 2002-11-6 10:03:51

21.计算小时,分,秒,毫秒
select
Days,
A,
TRUNC(A*24) Hours,
TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes,
TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds,
TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSeconds
from
(
select
trunc(sysdate) Days,
sysdate - trunc(sysdate) A
from dual
)



select * from tabname
order by decode(mode,'FIFO',1,-1)*to_char(rq,'yyyymmddhh24miss');

//
floor((date2-date1) /365) 作为年
floor((date2-date1, 365) /30) 作为月
mod(mod(date2-date1, 365), 30)作为日.
23.next_day函数
next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。
1 2 3 4 5 6 7
日 一 二 三 四 五 六

---------------------------------------------------------------

select (sysdate-to_date('2003-12-03 12:55:45','yyyy-mm-dd hh24:mi:ss'))*24*60*60 from dual
日期 返回的是天 然后 转换为ss

oracle处理日期大全

在oracle中处理日期大全

TO_DATE格式
Day:
dd number 12
dy abbreviated fri
day spelled out friday
ddspth spelled out, ordinal twelfth
Month:
mm number 03
mon abbreviated mar
month spelled out march
Year:
yy two digits 98
yyyy four digits 1998

24小时格式下时间范围为: 0:00:00 - 23:59:59....
12小时格式下时间范围为: 1:00:00 - 12:59:59 ....
1.
日期和字符转换函数用法(to_date,to_char)

2.
select to_char( to_date(222,'J'),'Jsp') from dual

显示Two Hundred Twenty-Two

3.
求某天是星期几
select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual;
星期一
select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;
monday
设置日期语言
ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';
也可以这样
TO_DATE ('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE = American')

4.
两个日期间的天数
select floor(sysdate - to_date('20020405','yyyymmdd')) from dual;

5. 时间为null的用法
select id, active_date from table1
UNION
select 1, TO_DATE(null) from dual;

注意要用TO_DATE(null)

6.
a_date between to_date('20011201','yyyymmdd') and to_date('20011231','yyyymmdd')
那么12月31号中午12点之后和12月1号的12点之前是不包含在这个范围之内的。
所以,当时间需要精确的时候,觉得to_char还是必要的
7. 日期格式冲突问题
输入的格式要看你安装的ORACLE字符集的类型, 比如: US7ASCII, date格式的类型就是: '01-Jan-01'
alter system set NLS_DATE_LANGUAGE = American
alter session set NLS_DATE_LANGUAGE = American
或者在to_date中写
select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;
注意我这只是举了NLS_DATE_LANGUAGE,当然还有很多,
可查看
select * from nls_session_parameters
select * from V$NLS_PARAMETERS

8.
select count(*)
from ( select rownum-1 rnum
from all_objects
where rownum <= to_date('2002-02-28','yyyy-mm-dd') - to_date('2002-
02-01','yyyy-mm-dd')+1
)
where to_char( to_date('2002-02-01','yyyy-mm-dd')+rnum-1, 'D' )
not
in ( '1', '7' )

查找2002-02-28至2002-02-01间除星期一和七的天数
在前后分别调用DBMS_UTILITY.GET_TIME, 让后将结果相减(得到的是1/100秒, 而不是毫秒).

9.
select months_between(to_date('01-31-1999','MM-DD-YYYY'),
to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;
1

select months_between(to_date('02-01-1999','MM-DD-YYYY'),
to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;

1.03225806451613
10. Next_day的用法
Next_day(date, day)

Monday-Sunday, for format code DAY
Mon-Sun, for format code DY
1-7, for format code D

11
select to_char(sysdate,'hh:mi:ss') TIME from all_objects
注意:第一条记录的TIME 与最后一行是一样的
可以建立一个函数来处理这个问题
create or replace function sys_date return date is
begin
return sysdate;
end;

select to_char(sys_date,'hh:mi:ss') from all_objects;
12.
获得小时数

SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 2:38:40') from offer
SQL> select sysdate ,to_char(sysdate,'hh') from dual;

SYSDATE TO_CHAR(SYSDATE,'HH')
-------------------- ---------------------
2003-10-13 19:35:21 07

SQL> select sysdate ,to_char(sysdate,'hh24') from dual;

SYSDATE TO_CHAR(SYSDATE,'HH24')
-------------------- -----------------------
2003-10-13 19:35:21 19

获取年月日与此类似
13.
年月日的处理
select older_date,
newer_date,
years,
months,
abs(
trunc(
newer_date-
add_months( older_date,years*12+months )
)
) days
from ( select
trunc(months_between( newer_date, older_date )/12) YEARS,
mod(trunc(months_between( newer_date, older_date )),
12 ) MONTHS,
newer_date,
older_date
from ( select hiredate older_date,
add_months(hiredate,rownum)+rownum newer_date
from emp )
)

14.
处理月份天数不定的办法
select to_char(add_months(last_day(sysdate) +1, -2), 'yyyymmdd'),last_day(sysdate) from dual

16.
找出今年的天数
select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual

闰年的处理方法
to_char( last_day( to_date('02' || :year,'mmyyyy') ), 'dd' )
如果是28就不是闰年

17.
yyyy与rrrr的区别
'YYYY99 TO_C
------- ----
yyyy 99 0099
rrrr 99 1999
yyyy 01 0001
rrrr 01 2001

18.不同时区的处理
select to_char( NEW_TIME( sysdate, 'GMT','EST'), 'dd/mm/yyyy hh:mi:ss') ,sysdate
from dual;

19.
5秒钟一个间隔
Select TO_DATE(FLOOR(TO_CHAR(sysdate,'SSSSS')/300) * 300,'SSSSS') ,TO_CHAR(sysdate,'SSSSS')
from dual

2002-11-1 9:55:00 35786
SSSSS表示5位秒数

20.
一年的第几天
select TO_CHAR(SYSDATE,'DDD'),sysdate from dual
310 2002-11-6 10:03:51

21.计算小时,分,秒,毫秒
select
Days,
A,
TRUNC(A*24) Hours,
TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes,
TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds,
TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSeconds
from
(
select
trunc(sysdate) Days,
sysdate - trunc(sysdate) A
from dual
)



select * from tabname
order by decode(mode,'FIFO',1,-1)*to_char(rq,'yyyymmddhh24miss');

//
floor((date2-date1) /365) 作为年
floor((date2-date1, 365) /30) 作为月
mod(mod(date2-date1, 365), 30)作为日.
23.next_day函数
next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。
1 2 3 4 5 6 7
日 一 二 三 四 五 六


===================================
在oracle中有很多关于日期的函数,如:
1、add_months()用于从一个日期值增加或减少一些月份
date_value:=add_months(date_value,number_of_months)
例:
SQL> select add_months(sysdate,12) "Next Year" from dual;

Next Year
----------
13-11月-04

SQL> select add_months(sysdate,112) "Last Year" from dual;

Last Year
----------
13-3月 -13

SQL>

2、current_date()返回当前会放时区中的当前日期
date_value:=current_date
SQL> column sessiontimezone for a15
SQL> select sessiontimezone,current_date from dual;

SESSIONTIMEZONE CURRENT_DA
--------------- ----------
+08:00 13-11月-03

SQL> alter session set time_zone='-11:00'
2 /

会话已更改。

SQL> select sessiontimezone,current_timestamp from dual;

SESSIONTIMEZONE CURRENT_TIMESTAMP
--------------- ------------------------------------
-11:00 12-11月-03 04.59.13.668000 下午 -11:
00

SQL>

3、current_timestamp()以timestamp with time zone数据类型返回当前会放时区中的当前日期
timestamp_with_time_zone_value:=current_timestamp([timestamp_precision])
SQL> column sessiontimezone for a15
SQL> column current_timestamp format a36
SQL> select sessiontimezone,current_timestamp from dual;

SESSIONTIMEZONE CURRENT_TIMESTAMP
--------------- ------------------------------------
+08:00 13-11月-03 11.56.28.160000 上午 +08:
00

SQL> alter session set time_zone='-11:00'
2 /

会话已更改。

SQL> select sessiontimezone,current_timestamp from dual;

SESSIONTIMEZONE CURRENT_TIMESTAMP
--------------- ------------------------------------
-11:00 12-11月-03 04.58.00.243000 下午 -11:
00

SQL>

4、dbtimezone()返回时区
varchar_value:=dbtimezone
SQL> select dbtimezone from dual;

DBTIME
------
-07:00

SQL>

5、extract()找出日期或间隔值的字段值
date_value:=extract(date_field from [datetime_value|interval_value])
SQL> select extract(month from sysdate) "This Month" from dual;

This Month
----------
11

SQL> select extract(year from add_months(sysdate,36)) "3 Years Out" from dual;

3 Years Out
-----------
2006

SQL>

6、last_day()返回包含了日期参数的月份的最后一天的日期
date_value:=last_day(date_value)
SQL> select last_day(date'2000-02-01') "Leap Yr?" from dual;

Leap Yr?
----------
29-2月 -00

SQL> select last_day(sysdate) "Last day of this month" from dual;

Last day o
----------
30-11月-03

SQL>

7、localtimestamp()返回会话中的日期和时间
timestamp_value:=localtimestamp
SQL> column localtimestamp format a28
SQL> select localtimestamp from dual;

LOCALTIMESTAMP
----------------------------
13-11月-03 12.09.15.433000
下午

SQL> select localtimestamp,current_timestamp from dual;

LOCALTIMESTAMP CURRENT_TIMESTAMP
---------------------------- ------------------------------------
13-11月-03 12.09.31.006000 13-11月-03 12.09.31.006000 下午 +08:
下午 00

SQL> alter session set time_zone='-11:00';

会话已更改。

SQL> select localtimestamp,to_char(sysdate,'DD-MM-YYYY HH:MI:SS AM') "SYSDATE" from dual;

LOCALTIMESTAMP SYSDATE
---------------------------- ------------------------
12-11月-03 05.11.31.259000 13-11-2003 12:11:31 下午
下午

SQL>

8、months_between()判断两个日期之间的月份数量
number_value:=months_between(date_value,date_value)
SQL> select months_between(sysdate,date'1971-05-18') from dual;

MONTHS_BETWEEN(SYSDATE,DATE'1971-05-18')
----------------------------------------
389.855143

SQL> select months_between(sysdate,date'2001-01-01') from dual;

MONTHS_BETWEEN(SYSDATE,DATE'2001-01-01')
----------------------------------------
34.4035409

SQL>

9、next_day()给定一个日期值,返回由第二个参数指出的日子第一次出现在的日期值(应返回相应日子的名称字符串)



==============================================
1.查询某周的第一天
select trunc(decode(ww, 53, to_date(yy || '3112', 'yyyyddmm'), to_date(yy || '-' || to_char(ww * 7), 'yyyy-ddd')), 'd') last_day
from (select substr('2004-32', 1, 4) yy, to_number(substr('2004-32', 6)) ww
from dual)

select trunc(to_date(substr('2003-01',1,5)||to_char((to_number(substr('2003-01',6)))*7),'yyyy-ddd'),'d')-6 first_day from dual

select min(v_date) from
(select (to_date('200201','yyyymm') + rownum) v_date
from all_tables
where rownum < 370)
where to_char(v_date,'yyyy-iw') = '2002-49'

2.查询某周的最后一天
select trunc(decode(ww, 53, to_date(yy || '3112', 'yyyyddmm'), to_date(yy || '-' || to_char(ww * 7), 'yyyy-ddd')), 'd') - 6 first_day
from (select substr('2004-33', 1, 4) yy, to_number(substr('2004-33', 6)) ww
from dual)

select trunc(to_date(substr('2003-01',1,5)||to_char((to_number(substr('2003-01',6)))*7),'yyyy-ddd'),'d') last_day from dual

select max(v_date) from
(select (to_date('200408','yyyymm') + rownum) v_date
from all_tables
where rownum < 370)
where to_char(v_date,'yyyy-iw') = '2004-33'

3.查询某周的日期
select min_date, to_char(min_date,'day') day from
(select to_date(substr('2004-33',1,4)||'001'+rownum-1,'yyyyddd') min_date
from all_tables
where rownum <= decode(mod(to_number(substr('2004-33',1,4)),4),0,366,365)
union

select to_date(substr('2004-33',1,4)-1||
decode(mod(to_number(substr('2004-33',1,4))-1,4),0,359,358)+rownum,'yyyyddd') min_date
from all_tables
where rownum <= 7
union

select to_date(substr('2004-33',1,4)+1||'001'+rownum-1,'yyyyddd') min_date
from all_tables
where rownum <= 7
)
where to_char(min_date,'yyyy-iw') ='2004-33'


=============================================
在论坛中常常看到有对oracle中时间运算提问的问题,今天有时间,看了看以前各位兄弟的贴子,整理了一下,并作了个示例,希望会对大家有帮助。
首先感谢ern、eric.li及各版主还有热心的兄弟们

内容如下:
1、oracle支持对日期进行运算
2、日期运算时是以天为单位进行的
3、当需要以分秒等更小的单位算值时,按时间进制进行转换即可
4、进行时间进制转换时注意加括号(见示例中红色括号),否则会出问题

SQL> alter session set nls_date_format='yyyy-mm-dd hh:mi:ss';

会话已更改。

SQL> set serverout on
SQL> declare
2 DateValue date;
3 begin
4 select sysdate into DateValue from dual;
5 dbms_output.put_line('源时间:'||to_char(DateValue));
6 dbms_output.put_line('源时间减1天:'||to_char(DateValue-1));
7 dbms_output.put_line('源时间减1天1小时:'||to_char(DateValue-1-1/24));
8 dbms_output.put_line('源时间减1天1小时1分:'||to_char(DateValue-1-1/24-1/(24*60)));
9 dbms_output.put_line('源时间减1天1小时1分1秒:'||to_char(DateValue-1-1/24-1/(24*60)-1/(24*60*6
0)));
10 end;
11 /
源时间:2003-12-29 11:53:41
源时间减1天:2003-12-28 11:53:41
源时间减1天1小时:2003-12-28 10:53:41
源时间减1天1小时1分:2003-12-28 10:52:41
源时间减1天1小时1分1秒:2003-12-28 10:52:40

2007年3月1日星期四

[转]真正爱你的女孩

真正爱你的女孩,虽然嘴上讨厌你说她小笨笨,可心里却很高兴。
真正爱你的女孩,在受委屈的时候总是第一个想到你。
真正爱你的女孩,在你迟到的时候责怪你,不是真的骂你,而是珍惜每一次和你在一起。
真正爱你的女孩,真的很小气,眼里容不下一颗沙粒。
真正爱你的女孩,每次生气故作没有消气,只是想听你来哄自己。
真正爱你的女孩,会陪你一起看你最喜欢的节目,即便是自己最讨厌的。  
真正爱你的女孩,总是要你慢点吃,因为怕你会有胃病。   
真正爱你的女孩,会不厌其烦地规劝你戒烟,即便她知道这是不可能的事情。 
真正爱你的女孩,会陪你一起打游戏,无论是不是自己喜欢的。  
真正爱你的女孩,会收集你最喜欢的东西,因为只要你高兴。   
真正爱你的女孩,不论在嘴上怎么挑剔,在她心里还是最爱你。  
真正爱你的女孩,很容易被你感动,哪怕是一件极小的事情。   
真正爱你的女孩,即使能独当一面,在你面前也会娇滴滴。   
真正爱你的女孩,当有人欺负你,会比你更气愤,不顾什么淑女形象和你一起大骂对方,直到消气。  
真正爱你的女孩,无论你有没有成绩,都会一直鼓励你。   
真正爱你的女孩,会不停地唠叨你,其实那是对你的关心。   
真正爱你的女孩,会在自己的好朋友面前不断提到你,因为她也想让朋友了解你。
真正爱你的女孩,不喜欢你有什么事都自己一个人承担,那样她会更加担心。 
真正爱你的女孩,每次和你聊天都舍不得自己关掉语音或是挂掉电话,都会等你关了之后才安心。  
所以,男孩一定要珍惜爱你的女孩!

[转]校园恋人分手时的经典清单

人总是失去才懂珍惜,不要怕对自己喜欢的人开口,不要吝惜说我爱你,也不要让自己有任何后悔的机会……
一天晚上,两个决定分手的恋人,正在谈判中。

女孩双眼红肿冷眼看了一看男的,便把刚才写好的清单递了给他:

书架-----我买的。

相框-----我买的。

时钟-----我买的。

椅子-----我买的。

以上物品我将搬走。

男孩看了一眼,从桌上拿起一根笔,伏在桌前振笔疾书,也给她一张纸:

棉被-----免费。

衣柜-----免费。

热水瓶-----免费。

电话-----免费。

两百封信-----免费。

无数次的接送-----免费。

陪著你、照顾你、等你-----免费。

你爱逛街,我带箸你到处跑-----免费。

以上全部免费赠送,欢迎搬走。

所有的衣服,花朵-----免费。

还有为你焦虑,为你欢喜,这些都是免费的。

以上全部都加起来,对你的真爱仍是免费的。

女孩看后,刚收藏好的泪水又逐渐解放出来;她垂下头,吸一吸鼻子,再抬起头还是冷冷地看著男孩说:“以上所有东西我全都搬走,还有你,我选的,也要搬走!!”

男孩二话不说便把女孩抱在怀里,在她耳边悄声地说:“把我搬走吧!!
我会用我的一辈子来呵护你,爱你

2007年2月13日星期二

网页中播放多媒体

<OBJECT id=MediaPlayer1
style="LEFT: 0px; VISIBILITY: visible; TOP: 0px"
type=application/x-oleobject height=670
standby="Loading Media Player components..." width=800
classid=CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95
name=msplayer
codebasr="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701"><PARAM NAME="AudioStream" VALUE="-1"><PARAM NAME="AutoSize" VALUE="0"><PARAM NAME="AutoStart" VALUE="-1"><PARAM NAME="AnimationAtStart" VALUE="-1"><PARAM NAME="AllowScan" VALUE="-1"><PARAM NAME="AllowChangeDisplaySize" VALUE="-1"><PARAM NAME="AutoRewind" VALUE="0"><PARAM NAME="Balance" VALUE="0"><PARAM NAME="BaseURL" VALUE=""><PARAM NAME="BufferingTime" VALUE="5"><PARAM NAME="CaptioningID" VALUE=""><PARAM NAME="ClickToPlay" VALUE="0"><PARAM NAME="CursorType" VALUE="0"><PARAM NAME="CurrentPosition" VALUE="-1"><PARAM NAME="CurrentMarker" VALUE="0"><PARAM NAME="DefaultFrame" VALUE=""><PARAM NAME="DisplayBackColor" VALUE="0"><PARAM NAME="DisplayForeColor" VALUE="16777215"><PARAM NAME="DisplayMode" VALUE="0"><PARAM NAME="DisplaySize" VALUE="4"><PARAM NAME="Enabled" VALUE="1"><PARAM NAME="EnableContextMenu" VALUE="0"><PARAM NAME="EnablePositionControls" VALUE="-1"><PARAM NAME="EnableFullScreenControls" VALUE="1"><PARAM NAME="EnableTracker" VALUE="-1"><PARAM NAME="playCount" VALUE="100"><PARAM NAME="Filename" VALUE="http://www.aaa.com/10.wmv">
<PARAM NAME="InvokeURLs" VALUE="-1"><PARAM NAME="Language" VALUE="-1"><PARAM NAME="Mute" VALUE="0"><PARAM NAME="PreviewMode" VALUE="0"><PARAM NAME="Rate" VALUE="1"><PARAM NAME="SAMILang" VALUE=""><PARAM NAME="SAMIStyle" VALUE=""><PARAM NAME="SAMIFileName" VALUE=""><PARAM NAME="SelectionStart" VALUE="-1"><PARAM NAME="SelectionEnd" VALUE="-1"><PARAM NAME="SendOpenStateChangeEvents" VALUE="-1"><PARAM NAME="SendWarningEvents" VALUE="-1"><PARAM NAME="SendErrorEvents" VALUE="-1"><PARAM NAME="SendKeyboardEvents" VALUE="0"><PARAM NAME="SendMouseClickEvents" VALUE="0"><PARAM NAME="SendMouseMoveEvents" VALUE="0"><PARAM NAME="SendPlayStateChangeEvents" VALUE="-1"><PARAM NAME="ShowCaptioning" VALUE="0"><PARAM NAME="ShowControls" VALUE="-1"><PARAM NAME="ShowAudioControls" VALUE="-1"><PARAM NAME="ShowDisplay" VALUE="0"><PARAM NAME="ShowGotoBar" VALUE="0"><PARAM NAME="ShowPositionControls" VALUE="-1"><PARAM NAME="ShowStatusBar" VALUE="1"><PARAM NAME="ShowTracker" VALUE="-1"><PARAM NAME="TransparentAtStart" VALUE="0"><PARAM NAME="VideoBorderWidth" VALUE="0"><PARAM NAME="VideoBorderColor" VALUE="0"><PARAM NAME="VideoBorder3D" VALUE="0"><PARAM NAME="Volume" VALUE="-600"><PARAM NAME="WindowlessVideo" VALUE="0">

</OBJECT>

<a href="http://www.microsoft.com/windows/windowsmedia/download/" target="_blank" ><font color="#FFFFFF" size="2"><b>需要您的机器安装Windows Media Player 点击下载</b></font></a>

2007年2月9日星期五

[转]tomcat服务器优化

关于tomcat服务器优化,常遇到的一些简单问题的解决方法
做jsp时,关于tomcat服务器优化,常遇到的一些简单问题的解决方法:
1.如何禁止访问目录列表:
修改tomcat x.x/conf/web.xml内的一个属性值,就是把true 改为 false
在web.xml里找到以下代码
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>
org.apache.catalina.servlets.DefaultServlet
</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
把其中的<init-param>
<param-name>listings</param-name>
<param-value>true</param-value>
</init-param>

改为 <init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>


2.如果某文件资源没有找到,服务器要报404错误,
如果执行的某个JSP文件产生 NullPointException
会显示一些不想异常提示代码,
为了让用户看到更更友好的页面
可在自己的虚拟目录的WEB-INF/web.xml中作如下的设置


<error-page>
<error-code>404</error-code>
<location>/notFileFound.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.NullPointerException</exception-type>
<location>/null.jsp</location>
</error-page>
同理,你也可以设置抛出其它异常时应该显示的页面!


另外在jsp页面最上方加上这样一句话,
<%@ page isErrorPage="true" errorPage="error.jsp"%>
也可以捕捉NullPointerException这种异常,此时转向error.jsp

3.设置session的超时时间 (单位:分钟)

<session-config>
<session-timeout>30</session-timeout>
</session-config>

4.设置默认欢迎页面(当不输入文件名,只输入目录时起作用)
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
</welcome-file-list>

[转]变态JAVA面试32问

第一,谈谈final, finally, finalize的区别。

第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?

第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。

第四,&和&&的区别。

第五,HashMap和Hashtable的区别。

第六,Collection 和 Collections的区别。

第七,什么时候用assert。

第八,GC是什么? 为什么要有GC?

第九,String s = new String("xyz");创建了几个String Object?

第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

第十一,short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

第十二,sleep() 和 wait() 有什么区别?

第十三,Java有没有goto?

第十四,数组有没有length()这个方法? String有没有length()这个方法?

第十五,Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

第十六,Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?

第十七,给我一个你最常见到的runtime exception。

第十八,error和exception有什么区别?

第十九,List, Set, Map是否继承自Collection接口?

第二十,abstract class和interface有什么区别?

第二十一,abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

第二十二,接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?

第二十三,启动一个线程是用run()还是start()?

第二十四,构造器Constructor是否可被override?

第二十五,是否可以继承String类?

第二十六,当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?

第二十七,try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

第二十八,编程题: 用最有效率的方法算出2乘以8等於几?

第二十九,两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?

第三十,当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

第三十二,编程题: 写一个Singleton出来。

以下是答案

第一,谈谈final, finally, finalize的区别。
final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载
finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。
finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。

第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现。

第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。
Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。具体可见http: //www.frontfree.net/articles/services/view.asp?id=704&page=1
注: 静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象

第四,&和&&的区别。
&是位运算符。&&是布尔逻辑运算符。

第五,HashMap和Hashtable的区别。
都属于Map接口的类,实现了将惟一键映射到特定的值上。
HashMap 类没有分类或者排序。它允许一个 null 键和多个 null 值。
Hashtable 类似于 HashMap,但是不允许 null 键和 null 值。它也比 HashMap 慢,因为它是同步的。

第六,Collection 和 Collections的区别。
Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。
Collection是个java.util下的接口,它是各种集合结构的父接口。

第七,什么时候用assert。
断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为 true。如果表达式计算为 false,那么系统会报告一个 AssertionError。它用于调试目的:
assert(a > 0); // throws an AssertionError if a <= 0
断言可以有两种形式:
assert Expression1 ;
assert Expression1 : Expression2 ;
Expression1 应该总是产生一个布尔值。
Expression2 可以是得出一个值的任意表达式。这个值用于生成显示更多调试信息的 String 消息。
断言在默认情况下是禁用的。要在编译时启用断言,需要使用 source 1.4 标记:
javac -source 1.4 Test.java
要在运行时启用断言,可使用 -enableassertions 或者 -ea 标记。
要在运行时选择禁用断言,可使用 -da 或者 -disableassertions 标记。
要系统类中启用断言,可使用 -esa 或者 -dsa 标记。还可以在包的基础上启用或者禁用断言。
可以在预计正常情况下不会到达的任何位置上放置断言。断言可以用于验证传递给私有方法的参数。不过,断言不应该用于验证传递给公有方法的参数,因为不管是否启用了断言,公有方法都必须检查其参数。不过,既可以在公有方法中,也可以在非公有方法中利用断言测试后置条件。另外,断言不应该以任何方式改变程序的状态。

第八,GC是什么? 为什么要有GC? (基础)。
GC是垃圾收集器。Java 程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()

第九,String s = new String("xyz");创建了几个String Object?
两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。

第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;

第十一,short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确。

第十二,sleep() 和 wait() 有什么区别? 搞线程的最爱
sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级
(b)正在运行的线程因为其它原因而阻塞。
wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。

第十三,Java有没有goto?
Goto—java中的保留字,现在没有在java中使用。

第十四,数组有没有length()这个方法? String有没有length()这个方法?
数组没有length()这个方法,有length的属性。
String有有length()这个方法。

第十五,Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。

第十六,Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。
equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。

第十七,给我一个你最常见到的runtime exception。
ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException,
ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException

第十八,error和exception有什么区别?
error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。
exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。

第十九,List, Set, Map是否继承自Collection接口?
List,Set是

Map不是

第二十,abstract class和interface有什么区别?
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。

第二十一,abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
都不能

第二十二,接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?
接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。

第二十三,启动一个线程是用run()还是start()?
启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。

第二十四,构造器Constructor是否可被override?
构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。

第二十五,是否可以继承String类?
String类是final类故不可以继承。

第二十六,当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
不能,一个对象的一个synchronized方法只能由一个线程访问。

第二十七,try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
会执行,在return前执行。

第二十八,编程题: 用最有效率的方法算出2乘以8等於几?
有C背景的程序员特别喜欢问这种问题。

2 << 3

第二十九,两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
不对,有相同的hash code。

第三十,当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
是值传递。Java 编程语言只由值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。

第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。

第三十二,编程题: 写一个Singleton出来。
Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。
一般Singleton模式通常有几种种形式:
第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。
public class Singleton {
  private Singleton(){}
  //在自己内部定义自己一个实例,是不是很奇怪?
  //注意这是private 只供内部调用
  private static Singleton instance = new Singleton();
  //这里提供了一个供外部访问本class的静态方法,可以直接访问  
  public static Singleton getInstance() {
    return instance;   
   }
}
第二种形式:
public class Singleton {
  private static Singleton instance = null;
  public static synchronized Singleton getInstance() {
  //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次     
  //使用时生成实例,提高了效率!
  if (instance==null)
    instance=new Singleton();
return instance;   }
}
其他形式:
定义一个类,它的构造函数为private的,所有方法为static的。
一般认为第一种形式要更加安全些
第三十三 Hashtable和HashMap
Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现

HashMap允许将null作为一个entry的key或者value,而Hashtable不允许

还有就是,HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。

最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在
多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap
就必须为之提供外同步。

Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。