<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    斷點(diǎn)

    每天進(jìn)步一點(diǎn)點(diǎn)!
    posts - 174, comments - 56, trackbacks - 0, articles - 21

    有兩個(gè)簡(jiǎn)單例子,以說明 “exists”和“in”的效率問題

    1) select * from T1 where exists(select * from T2 where T1.a=T2.a) ;

        T1數(shù)據(jù)量小而T2數(shù)據(jù)量非常大時(shí),T1<<T2 時(shí),1) 的查詢效率高。

    2) select * from T1 where T1.a in (select T2.a from T2) ;

         T1數(shù)據(jù)量非常大而T2數(shù)據(jù)量小時(shí),T1>>T2 時(shí),2) 的查詢效率高。

    exists 用法:

    1)句中的“select * from T2 where T1.a=T2.a” 相當(dāng)于一個(gè)關(guān)聯(lián)表查詢,

         相當(dāng)于“select * from T1,T2  where T1.a=T2.a”;

        “exists(xxx)”它只在乎括號(hào)里的數(shù)據(jù)能不能查找出來,是否存在這樣的記錄,如果存在,這1)句的where 條件成立。

    in的用法:

    2)句中的“select * from T1 where T1.a in (select T2.a from T2) ”,這里的“in”后面括號(hào)里的語句搜索出來的字段的內(nèi)容一定要相對(duì)應(yīng),一般來說,T1和T2這兩個(gè)表的a字段表達(dá)的意義應(yīng)該是一樣的,否則這樣查沒什么意義。

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

    +++++++++++++   下面轉(zhuǎn)載  +++++++++++++++++++

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

    今天市場(chǎng)報(bào)告有個(gè)sql及慢,運(yùn)行需要20多分鐘,如下:
    update p_container_decl cd
    set cd.ANNUL_FLAG=\'0001\',ANNUL_DATE = sysdate
    where exists(
    select 1
    from (
    select tc.decl_no,tc.goods_no
    from p_transfer_cont tc,P_AFFIRM_DO ad
    where tc.GOODS_DECL_NO = ad.DECL_NO
    and ad.DECL_NO = \'sssssssssssssssss\'
    ) a
    where a.decl_no = cd.decl_no
    and a.goods_no = cd.goods_no
    )
    上面涉及的3個(gè)表的記錄數(shù)都不小,均在百萬左右。根據(jù)這種情況,我想到了前不久看的tom的一篇文章,說的是exists和in的區(qū)別,in 是把外表和那表作hash join,而exists是對(duì)外表作loop,每次loop再對(duì)那表進(jìn)行查詢。
    這樣的話,in適合內(nèi)外表都很大的情況,exists適合外表結(jié)果集很小的情況。

    而我目前的情況適合用in來作查詢,于是我改寫了sql,如下:
    update p_container_decl cd
    set cd.ANNUL_FLAG=\'0001\',ANNUL_DATE = sysdate
    where (decl_no,goods_no) in
    (
    select tc.decl_no,tc.goods_no
    from p_transfer_cont tc,P_AFFIRM_DO ad
    where tc.GOODS_DECL_NO = ad.DECL_NO
    and ad.DECL_NO = ‘ssssssssssss’
    )

    讓市場(chǎng)人員測(cè)試,結(jié)果運(yùn)行時(shí)間在1分鐘內(nèi)。問題解決了,看來exists和in確實(shí)是要根據(jù)表的數(shù)據(jù)量來決定使用。

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


    posted @ 2009-02-01 17:54 斷點(diǎn) 閱讀(240) | 評(píng)論 (0)

    posted @ 2010-01-14 21:42 斷點(diǎn) 閱讀(298) | 評(píng)論 (0)編輯 收藏

    在卸載Oracle時(shí)刪不干凈,搞的要重裝系統(tǒng),本人在工作中總結(jié)出如下方法,希望對(duì)大家有所幫助。
    注意:oracle的源程序的路徑必須是英文路徑,否則安裝會(huì)出錯(cuò)!

    1.以Administrators 身份登陸windows系統(tǒng)。
    2.停掉Oracle Service服務(wù)。 
    3.通過Oracle installer 卸載任何orcle產(chǎn)品及組件。
    4.刪除%ORACLE_base%文檔和SYSTEM_DRIVE:\program files下的oracle文檔。
    5.刪除SYSTEM_DRIVE:\Documents and Settings\All Users\「開始」菜單\程式中的oracle項(xiàng)。
    6.在“開始菜單”—點(diǎn)“運(yùn)行”—輸入“regedit”打開注冊(cè)表:
       到HKEY_CLASSES_ROOT下,刪除以O(shè)racle,ORA,ORCL開頭的鍵;
       到HKEY_LOCAL_MACHINE\SOFTWARE下,刪除ORACLE鍵和Apache Group鍵;
       到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services下,刪除以O(shè)racle開頭的鍵;
       到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services \Eventlog\Application下,刪除以O(shè)racle
    開頭的鍵;
      到HKEY_CURRENT_USER下,刪除Oracle鍵;
      到HKEY_CURRENT_USER\SOFTWARE\ORACLE下,刪除以O(shè)racle 或 Orcl開頭的鍵(假如有的話);
    7.打開系統(tǒng)系統(tǒng)環(huán)境變量(我的電腦->右鍵->系統(tǒng)屬性->高級(jí)->環(huán)境變量),在PATH中刪除任何以%
    ORACLE_HOME%開始的項(xiàng)。
    8.重啟電腦。


    posted @ 2008-12-18 12:37 斷點(diǎn) 閱讀(68) | 評(píng)論 (0)

    posted @ 2010-01-14 21:41 斷點(diǎn) 閱讀(249) | 評(píng)論 (0)編輯 收藏

    一、建庫和建表以及插入數(shù)據(jù)的實(shí)例。
    drop database if exists school; -- 如果存在SCHOOL則刪除
    create database school; -- 建立庫SCHOOL
    use school; -- 打開庫SCHOOL
    create table teacher -- 建立表TEACHER
    (
    id integer auto_increment not null primary key,
    name varchar(10) not null
    ); -- 建表結(jié)束
    insert into teacher values(null,'t');
    insert into teacher values(null,'j');
    在dos下命令不方便調(diào)試,你可以將以上命令寫入一個(gè)文件中取名為school.sql,然后復(fù)制到c:\下,并在DOS窗口下鍵入以下命令:mysql -uroot -p密碼 < c:/school.sql。

    二、Windows下.sql文件的導(dǎo)入導(dǎo)出。
    DOS窗口:開始->運(yùn)行->cmd
    導(dǎo)入為:mysql -uroot -proot<c:/school.sql
    導(dǎo)出為:mysqldump -uroot -proot school>c:/school.sql

    三、數(shù)據(jù)的備份(命令在DOS窗口下執(zhí)行):
    1.備份數(shù)據(jù)庫:(將數(shù)據(jù)庫school備份)
    mysqldump -uroot -proot school>c:/school.sql
    2.將備份數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫:(導(dǎo)回school數(shù)據(jù)庫)
    mysql -uroot -proot school<c:/school.sql
    注意:此時(shí)已有數(shù)據(jù)庫school。
    注意:另一種方式,就是進(jìn)入mysql數(shù)據(jù)庫控制臺(tái),use school,然后使用source命令source c:/school.sql即可。

    四、將文本數(shù)據(jù)導(dǎo)入到mysql數(shù)據(jù)庫中。
    1、文本數(shù)據(jù)應(yīng)符合相應(yīng)的格式:字段數(shù)據(jù)之間用tab鍵隔開,null值用\n來代替。
    例:取一個(gè)文件名為teacher.txt,里面內(nèi)容如下:
    \n w
    \n h
    2、數(shù)據(jù)傳入命令 load data local infile "c:/teacher.txt" into table teacher;
    注意:在mysql命令窗口中,先要用use命令打開此表所在的數(shù)據(jù)庫。


    posted @ 2009-03-26 10:05 斷點(diǎn) 閱讀(90) | 評(píng)論 (0)

    posted @ 2010-01-14 21:40 斷點(diǎn) 閱讀(379) | 評(píng)論 (0)編輯 收藏

    一、常用命令
    列出數(shù)據(jù)庫:show databases;
    選擇數(shù)據(jù)庫:use databaseName;
    列出表格:show tables;
    建庫create database 庫名;
    建表create table 表名;
    顯示數(shù)據(jù)表的結(jié)構(gòu):desc 表名;
    刪庫 drop database 庫名;
    刪表 drop table 表名;
    將表中記錄清空:delete from 表名;
    顯示表中的記錄:select * from 表名;

    二、連接MYSQL。
    格式: mysql -h主機(jī)地址 -u用戶名 -p用戶密碼
    1、例1:連接到本機(jī)上的MYSQL。
    首先在打開DOS窗口,鍵入命令mysql -uroot -p,回車后提示你輸密碼。
    2、例2:連接到遠(yuǎn)程主機(jī)上的MYSQL。假設(shè)遠(yuǎn)程主機(jī)的IP為:192.168.1.5,用戶名為root,密碼為root。則鍵入以下命令: mysql -h192.168.1.5 -uroot -proot
    3、退出MYSQL命令: exit (回車)

    三、其它命令:
    查詢時(shí)間:select now();
    查詢數(shù)據(jù)庫版本:select version();
    查詢當(dāng)前用戶:select user();
    查詢當(dāng)前使用的數(shù)據(jù)庫:select database();  
    匹配字符:可以用通配符_代表任何一個(gè)字符,%代表任何字符串;
    增加一個(gè)字段:alter table tabelName add column fieldName dateType;
    增加多個(gè)字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
    修改密碼:mysqladmin -u用戶名 -p舊密碼 password新密碼

    以下轉(zhuǎn)載:

    增加新用戶:
    格式:grant select on 數(shù)據(jù)庫.* to 用戶名@登錄主機(jī) identified by "密碼"

    例1、增加一個(gè)用戶test1密碼為abc,讓他可以在任何主機(jī)上登錄,并對(duì)所有數(shù)據(jù)庫有查詢、插入、修改、刪除的權(quán)限。首先用以root用戶連入MYSQL,然后鍵入以下命令:
    grant select,insert,update,delete on *.* to test1@"%" Identified by "abc";
    但例1增加的用戶是十分危險(xiǎn)的,你想如某個(gè)人知道test1的密碼,那么他就可以在internet上的任何一臺(tái)電腦上登錄你的mysql數(shù)據(jù)庫并對(duì)你的數(shù)據(jù)可以為所欲為了,解決辦法見例2。

    例2、增加一個(gè)用戶test2密碼為abc,讓他只可以在localhost上登錄,并可以對(duì)數(shù)據(jù)庫mydb進(jìn)行查詢、插入、修改、刪除的操作(localhost指本地主機(jī),即MYSQL數(shù)據(jù)庫所在的那臺(tái)主機(jī)),這樣用戶即使用知道test2的密碼,他也無法從internet上直接訪問數(shù)據(jù)庫,只能通過MYSQL主機(jī)上的web頁來訪問了。
    grant select,insert,update,delete on mydb.* to test2@localhost identified by "abc";

    例3.如果你不想test2有密碼,可以再打一個(gè)命令將密碼消掉。
    grant select,insert,update,delete on mydb.* to test2@localhost identified by "";

    例4.增加一個(gè)管理員帳戶:grant all on *.* to user@localhost identified by "password";

    其它命令集:
    從已經(jīng)有的表中復(fù)制表的結(jié)構(gòu)create table table2 select * from table1 where 1<>1; 
    復(fù)制表create table table2 select * from table1; 
    對(duì)表重新命名alter table table1 rename as table2;
    修改列的類型:
    alter table table1 modify id int unsigned;//修改列id的類型為int unsigned
    alter table table1 change id sid int unsigned;//修改列id的名字為sid,而且把屬性修改為int unsigned 
    創(chuàng)建索引:
    alter table table1 add index ind_id (id);
    create index ind_id on table1 (id);
    create unique index ind_id on table1 (id);//建立唯一性索引 
    刪除索引:
    drop index idx_id on table1;
    alter table table1 drop index ind_id; 
    聯(lián)合字符或者多個(gè)列(將列id與":"和列name和"="連接):
    select concat(id,':',name,'=') from students。  
    limit(選出10到20條)<第一個(gè)記錄集的編號(hào)是0>:
    select * from students order by id limit 9,10。  
    MySQL不支持的功能:事務(wù),視圖,外鍵和引用完整性,存儲(chǔ)過程和觸發(fā)器。


    posted @ 2009-03-26 10:02 斷點(diǎn) 閱讀(79) | 評(píng)論 (0)

    posted @ 2010-01-14 21:38 斷點(diǎn) 閱讀(231) | 評(píng)論 (0)編輯 收藏

    這個(gè)問題主要是MySQL自身的配置問題,修改一下,即可解決。

    把E:\MySQL\MySQL Server 5.0里面的my.ini文件,default-character-set項(xiàng)修改為

    default-character-set=gbk

    注意:default-character-set兩處需要進(jìn)行修改,且修改后的值一樣為gbk。

    posted @ 2009-02-12 10:23 斷點(diǎn) 閱讀(65) | 評(píng)論 (0)

    posted @ 2010-01-14 21:36 斷點(diǎn) 閱讀(186) | 評(píng)論 (0)編輯 收藏

    項(xiàng)目開始的時(shí)候用的是這個(gè)my97,選一下日期就能帶出來,感覺挺好,但到了后來項(xiàng)目上線了,有一個(gè)“保險(xiǎn)起期”、“保險(xiǎn)止期”聯(lián)動(dòng),發(fā)現(xiàn)控件上的日期需要雙擊才可聯(lián)動(dòng);如果只單擊一下“保險(xiǎn)起期”,然后離開點(diǎn)頁面其他地方,兩個(gè)時(shí)間沒有聯(lián)動(dòng)起來。經(jīng)項(xiàng)目組js牛人(wuguojian)努力攻關(guān),終于實(shí)現(xiàn)了點(diǎn)擊就可以聯(lián)動(dòng)的效果。

     

    改造有兩個(gè)方面的原因:

    1.如果業(yè)務(wù)人員,只單擊了“保險(xiǎn)起期”,而“保險(xiǎn)止期”沒有聯(lián)動(dòng),以前的默認(rèn)的保險(xiǎn)期間365天沒有發(fā)生變化,而保單打印出來的時(shí)間“保險(xiǎn)起期”、“保險(xiǎn)止期”有變化,易引起麻煩。

    2.剛才提到雙擊可以聯(lián)動(dòng),還有單擊后點(diǎn)刷新也可以聯(lián)動(dòng),但是在網(wǎng)絡(luò)慢的情況下,影響出單員的效率。

    改造如下:

    對(duì)文件My97DatePicker.htm部分進(jìn)行修改,增加一個(gè)js方法,在body里面引用:
    <head>
    <script>
    // 增加日歷控件關(guān)閉事件 2009-10-26
    function getObj() {
     var divs = document.body.getElementsByTagName("div");
     for (var i=0,len=divs.length;i<len;i++) {
      if (divs[i].className == 'WdateDiv') {
       divs[i].onblur = function () {
        $dp.el.onchange();
       };
       break;
      }
     }
    }
    </script>
    </head>
    <body leftmargin="0" topmargin="0" onload="$c.autoSize();getObj();">
    </body>

    控件連接地址:http://www.my97.net/dp/demo/index.htm

    posted @ 2009-10-31 18:08 斷點(diǎn) 閱讀(19) | 評(píng)論 (0)

    posted @ 2010-01-14 21:34 斷點(diǎn) 閱讀(685) | 評(píng)論 (2)編輯 收藏

    什么是正則表達(dá)式
    簡(jiǎn)單的說,正則表達(dá)式是一種可以用于模式匹配和替換的強(qiáng)有力的工具。

    其作用如下:
    1、測(cè)試字符串的某個(gè)模式。例如,可以對(duì)一個(gè)輸入字符串進(jìn)行測(cè)試,看在該字符串是否存在一個(gè)電話號(hào)碼模式或一個(gè)信用卡號(hào)碼模式。這稱為數(shù)據(jù)有效性驗(yàn)證。
    2、替換文本。可以在文檔中使用一個(gè)正則表達(dá)式來標(biāo)識(shí)特定文字,然后可以全部將其刪除,或者替換為別的文字。
    3、根據(jù)模式匹配從字符串中提取一個(gè)子字符串。可以用來在文本或輸入字段中查找特定文字。

     
    正則表達(dá)式的形式一般如下:

    /love/ 其中位于“/”定界符之間的部分就是將要在目標(biāo)對(duì)象中進(jìn)行匹配的模式。用戶只要把希望查找匹配對(duì)象的模式內(nèi)容放入“/”定界符之間即可。為了能夠使用戶更加靈活的定制模式內(nèi)容,正則表達(dá)式提供了專門的“元字符”。所謂元字符就是指那些在正則表達(dá)式中具有特殊意義的專用字符,可以用來規(guī)定其前導(dǎo)字符(即位于元字符前面的字符)在目標(biāo)對(duì)象中的出現(xiàn)模式。
     
    1、元字符。常用的包括: “+”, “*”,以及 “?”。
    “+”元字符規(guī)定其前導(dǎo)字符必須在目標(biāo)對(duì)象中連續(xù)出現(xiàn)一次或多次。
    “*”元字符規(guī)定其前導(dǎo)字符必須在目標(biāo)對(duì)象中出現(xiàn)零次或連續(xù)多次。
    “?”元字符規(guī)定其前導(dǎo)對(duì)象必須在目標(biāo)對(duì)象中連續(xù)出現(xiàn)零次或一次。 
    \s:用于匹配單個(gè)空格符,包括tab鍵和換行符;
    \S:用于匹配除單個(gè)空格符之外的所有字符;
    \d:用于匹配從0到9的數(shù)字;
    \w:用于匹配字母,數(shù)字或下劃線字符;
    \W:用于匹配所有與\w不匹配的字符;
    . :用于匹配除換行符之外的所有字符。
    例子:
    /fo+/ 因?yàn)樯鲜稣齽t表達(dá)式中包含“+”元字符,表示可以與目標(biāo)對(duì)象中的 “fool”, “fo”, 或者 “football”等在字母f后面連續(xù)出現(xiàn)一個(gè)或多個(gè)字母o的字符串相匹配。
    /eg*/ 因?yàn)樯鲜稣齽t表達(dá)式中包含“*”元字符,表示可以與目標(biāo)對(duì)象中的 “easy”, “ego”, 或者 “egg”等在字母e后面連續(xù)出現(xiàn)零個(gè)或多個(gè)字母g的字符串相匹配。
    /Wil?/ 因?yàn)樯鲜稣齽t表達(dá)式中包含“?”元字符,表示可以與目標(biāo)對(duì)象中的 “Win”, 或者“Wilson”,等在字母i后面連續(xù)出現(xiàn)零個(gè)或一個(gè)字母l的字符串相匹配。
    /\s+/ 上述正則表達(dá)式可以用于匹配目標(biāo)對(duì)象中的一個(gè)或多個(gè)空格字符。
    /\d000/ 如果我們手中有一份復(fù)雜的財(cái)務(wù)報(bào)表,那么我們可以通過上述正則表達(dá)式輕而易舉的查找到所有總額達(dá)千元的款項(xiàng)。

    2、限定符。有時(shí)候不知道要匹配多少字符。為了能適應(yīng)這種不確定性,正則表達(dá)式支持限定符的概念。
    {n} n 是一個(gè)非負(fù)整數(shù)。匹配確定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的兩個(gè) o。
    {n,} n 是一個(gè)非負(fù)整數(shù)。至少匹配 n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等價(jià)于 'o+'。'o{0,}' 則等價(jià)于 'o*'。
    {n,m} m 和 n 均為非負(fù)整數(shù),其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 將匹配 "fooooood" 中的前三個(gè) o。'o{0,1}' 等價(jià)于 'o?'。請(qǐng)注意在逗號(hào)和兩個(gè)數(shù)之間不能有空格。


    3、定位符。定位符用于規(guī)定匹配模式在目標(biāo)對(duì)象中的出現(xiàn)位置。 包括: “^”, “$”, “\b” 以及 “\B”。
    “^”定位符規(guī)定匹配模式必須出現(xiàn)在目標(biāo)字符串的開頭
    “$”定位符規(guī)定匹配模式必須出現(xiàn)在目標(biāo)對(duì)象的結(jié)尾
    “\b”定位符規(guī)定匹配模式必須出現(xiàn)在目標(biāo)字符串的開頭或結(jié)尾的兩個(gè)邊界之一
    “\B”定位符則規(guī)定匹配對(duì)象必須位于目標(biāo)字符串的開頭和結(jié)尾兩個(gè)邊界之內(nèi)。

    舉例:
    /^hell/ 因?yàn)樯鲜稣齽t表達(dá)式中包含“^”定位符,所以可以與目標(biāo)對(duì)象中以 “hell”, “hello”或“hellhound”開頭的字符串相匹配。
     /ar$/ 因?yàn)樯鲜稣齽t表達(dá)式中包含“$”定位符,所以可以與目標(biāo)對(duì)象中以 “car”, “bar”或 “ar” 結(jié)尾的字符串相匹配。
    /\bbom/ 因?yàn)樯鲜稣齽t表達(dá)式模式以“\b”定位符開頭,所以可以與目標(biāo)對(duì)象中以 “bomb”, 或 “bom”開頭的字符串相匹配。
    /man\b/ 因?yàn)樯鲜稣齽t表達(dá)式模式以“\b”定位符結(jié)尾,所以可以與目標(biāo)對(duì)象中以 “human”, “woman”或 “man”結(jié)尾的字符串相匹配。

    4、為了方便用戶更加靈活的設(shè)定匹配模式,正則表達(dá)式允許使用者在匹配模式中指定某一個(gè)范圍而不局限于具體字符。例如: 
    /[A-Z]/ 上述正則表達(dá)式將會(huì)與從A到Z范圍內(nèi)任何一個(gè)大寫字母相匹配。
    /[a-z]/ 上述正則表達(dá)式將會(huì)與從a到z范圍內(nèi)任何一個(gè)小寫字母相匹配。
    /[0-9]/ 上述正則表達(dá)式將會(huì)與從0到9范圍內(nèi)任何一個(gè)數(shù)字相匹配。
    /([a-z][A-Z][0-9])+/ 上述正則表達(dá)式將會(huì)與任何由字母和數(shù)字組成的字符串,如 “aB0” 等相匹配。


    5、這里需要提醒用戶注意的一點(diǎn)就是可以在正則表達(dá)式中使用 “()” 把字符串組合在一起。
    6、如果我們希望在正則表達(dá)式中實(shí)現(xiàn)類似編程邏輯中的“或”運(yùn)算,在多個(gè)不同的模式中任選一個(gè)進(jìn)行匹配的話,可以使用管道符 “|”。
    例如:/to|too|2/ 上述正則表達(dá)式將會(huì)與目標(biāo)對(duì)象中的 “to”, “too”, 或 “2” 相匹配。

    7、否定符 “[^]”。規(guī)定目標(biāo)對(duì)象中不能存在模式中所規(guī)定的字符串。例如:/[^A-C]/ 上述字符串將會(huì)與目標(biāo)對(duì)象中除A,B,和C之外的任何字符相匹配。
    8、當(dāng)用戶需要在正則表達(dá)式的模式中加入元字符,可以使用轉(zhuǎn)義符“\”。例如:/Th\*/ 上述正則表達(dá)式將會(huì)與目標(biāo)對(duì)象中的“Th*”而非“The”等相匹配。


    區(qū)號(hào):前面一個(gè)0,后面跟2-3位數(shù)字 : 0\d{2,3}
    電話號(hào)碼:7-8位數(shù)字: \d{7,8}
    分機(jī)號(hào):一般都是3位數(shù)字: \d{3,}
    這樣連接起來就是驗(yàn)證電話的正則表達(dá)式了:/^((0\d{2,3})-)(\d{7,8})(-(\d{3,}))?$/

    手機(jī)號(hào)碼前面以1開頭,第二位現(xiàn)在是3或者5,后面是9位數(shù)字,則:/^1[35]\d{9}$/


    posted @ 2009-08-15 19:24 斷點(diǎn) 閱讀(39) | 評(píng)論 (0)

    posted @ 2010-01-14 21:32 斷點(diǎn) 閱讀(310) | 評(píng)論 (0)編輯 收藏

    有人問 Javascript 中如何截取小數(shù)位并實(shí)現(xiàn)四舍五入,這是一個(gè)很常用的 js 技術(shù),因?yàn)橛X得比較典型,可能很多新手都會(huì)遇到此問題,所以將帖子整理了一下,以備新手查閱。


    1、round 方法
    作用:返回與給出的數(shù)值表達(dá)式最接近的整數(shù)。
    語法:Math.round(number) ,必選項(xiàng) number 參數(shù)是要舍入到最接近整數(shù)的值。
    說明:如果 number 的小數(shù)部分大于等于 0.5,返回值是大于 number 的最小整數(shù)。否則,round 返回小于等于 number 的最大整數(shù)。

    2、在 Javascript 1.5 (IE5.5+,NS6+ 以上版本支持)中,新增了2個(gè)專門用于貨幣流通的函數(shù),Number.toFixed(x) 和 Number.toPrecision(x)。

    Number.toFixed(x) 是將指定數(shù)字截取小數(shù)點(diǎn)后 x 位, Number.toPrecision(x) 是將整個(gè)數(shù)字截取指定(x)長度。注意,一個(gè)是計(jì)算小數(shù)點(diǎn)后的長度,一個(gè)是計(jì)算整個(gè)數(shù)字的長度 。

    例如:
    <script type="text/javascript">
     var aa = 2.3362; 
    document.write(aa.toFixed(1)); // 2.3
    document.write(aa.toFixed(2)); // 2.34 
    document.write(aa.toPrecision(2)); // 2.3
    document.write(aa.toPrecision(3)); // 2.34 
    document.write(Math.round(aa * 10) / 10); // 2.3
    document.write(Math.round(aa * 100) / 100); // 2.34 
    </script>

    由于是新增函數(shù),所以要考慮瀏覽器支持問題。


    posted @ 2009-08-26 13:52 斷點(diǎn) 閱讀(157) | 評(píng)論 (0)

    posted @ 2010-01-14 21:32 斷點(diǎn) 閱讀(665) | 評(píng)論 (0)編輯 收藏

    數(shù)組分類:
    1、從數(shù)組的下標(biāo)分為索引數(shù)組、關(guān)聯(lián)數(shù)組
    /* 索引數(shù)組,即通常情況下所說的數(shù)組 */ 
    var ary1 = [1,3,5,8];  
    //按索引去取數(shù)組元素,從0開始(當(dāng)然某些語言實(shí)現(xiàn)從1開始),索引實(shí)際上就是序數(shù),一個(gè)整型數(shù)字  
    alert(ary1[0]);  
    alert(ary1[1]);  
    alert(ary1[2]);  
    alert(ary1[3]);  
     
    /* 關(guān)聯(lián)數(shù)組,指以非序數(shù)類型為下標(biāo)來存取的數(shù)組  python中稱為字典 */ 
    var ary2 = {};   //存取時(shí),以非序數(shù)(數(shù)字),這里是字符串  
    ary2["one"] = 1;  
    ary2["two"] = 2;  
    ary2["thr"]  = 3;  
    ary2["fou"] = 4;
     
    2、從對(duì)數(shù)據(jù)的存儲(chǔ)分為靜態(tài)數(shù)組、動(dòng)態(tài)數(shù)組
    /* java中的靜態(tài)數(shù)組 */ 
    Int[] ary1 = {1,3,6,9}; //定義后數(shù)組的長度固定了不能改變,按索引取數(shù)組元素  
      
    /* java中的動(dòng)態(tài)數(shù)組   (java中的ArrayList實(shí)現(xiàn)是以Array為基礎(chǔ)的。)*/ 
    List<Integer> ary2 = new ArrayList<Integer>();  
    ary2.add(1);//可以動(dòng)態(tài)的添加元素,數(shù)組的長度也隨著變化  
    ary2.add(3);  
    ary2.add(6);
     
    /* js的數(shù)組屬于動(dòng)態(tài)數(shù)組 */ 
    var ary = [];//定義一個(gè)數(shù)組,未指定長度  
    ary[0] = 1;//可以動(dòng)態(tài)的添加元素  
    ary.push(3);  
    ary.push(5);   
    alert(ary.join(","));//輸出1,3,5 

    js的數(shù)組同時(shí)屬于索引數(shù)組和動(dòng)態(tài)數(shù)組,因?yàn)楸举|(zhì)上它就是一個(gè)js對(duì)象,體現(xiàn)著js動(dòng)態(tài)語言特性。但js的索引數(shù)組并非“連續(xù)分配”內(nèi)存的,因此索引方法并不會(huì)帶來很高的效率。而java中的數(shù)組則是連續(xù)分配內(nèi)存的。


    例子:
    function test(){
            
    var oneArray=new Array();
            oneArray[
    "first"]="firstValue";
            oneArray[
    "second"]="secondValue";
            
            
            oneDrapList
    =document.createElement("select");
            
            
    for(att in oneArray){
                
    var oneOption=document.createElement("option");
                oneOption.text
    =oneArray[att]
                oneOption.value
    =att;
                
    try{
                    oneDrapList.add(oneOption,
    null);
                    }

                
    catch(ex){
                    oneDrapList.add(oneOption);
                    }

                }

    }


    function test(){
        var obj = tool.getFilterByName("<%=dwname%>",'VehicleClass');
        if(obj){
         var cProdNo = '<%=cProdNo%>';
         if(cProdNo=="0316"||cProdNo=="0325"){
           var array = {"摩托車類":"摩托車類","拖拉機(jī)類":"拖拉機(jī)類"};
           for(var temp in array){
          var option = new Option(temp,array[temp]);
          obj.add(option);
             }
        }
      }
    }

    posted @ 2009-08-14 21:28 斷點(diǎn) 閱讀(202) | 評(píng)論 (0)

    posted @ 2010-01-14 21:30 斷點(diǎn) 閱讀(538) | 評(píng)論 (0)編輯 收藏

    這幾天一直被日期的各種轉(zhuǎn)換纏繞在,現(xiàn)在終于解決,順便把自己這幾天的收獲貢獻(xiàn)出來,與大家一起共同成長。

    1、將日期字符串轉(zhuǎn)換成日期對(duì)象。
    yyyy-mm-dd這種格式的字符串轉(zhuǎn)化成日期對(duì)象,可以用new Date(Date.parse(str.replace(/-/g,"/")));
    如下:
    var endDateStr = endYear +"-"+ endMonth  +"-"+  endDay;
    endDate = new Date(Date.parse(endDateStr.replace(/-/g,"/")));
    實(shí)例顯示:
    endDateStr:"2010-5-20"
    Date.parse(endDateStr.replace(/-/g,"/")):1274284800000
    endDate:Thu May 20 00:00:00 UTC+0800 2010

    yyyy/mm/dd這種格式轉(zhuǎn)化成日期對(duì)象,可以用new Date(str);
    如下:
    var endDateStr = endYear +"/"+ endMonth  +"/"+  endDay;
    endDate = new Date(endDateStr);
    實(shí)例顯示:"2010/5/20"、Thu May 20 00:00:00 UTC+0800 2010

    yyyymmdd這種格式轉(zhuǎn)換成日期對(duì)象,可以用new Date(sDate.replace(/^(\d{4})(\d{2})(\d{2})$/,"$1/$2/$3"));
    如下:
    var sDate="20090516";
    sDate=sDate.replace(/^(\d{4})(\d{2})(\d{2})$/,"$1/$2/$3");
    new Date(sDate);
    實(shí)例顯示:"2009/05/16"、Sat May 16 00:00:00 UTC+0800 2009

    2、顯示當(dāng)前日期的下一天。
    var date = new Date();
    var b = date.getDate();
    b += 1;
    date.setDate(b);

    3、求兩個(gè)日期之間相差的天數(shù)。
    var Date1 =new Date(2008,6,28);               //Mon Jul 28 00:00:00 UTC+0800 2008
    var Date2 =new Date(2009,5,16);               //Tue Jun 16 00:00:00 UTC+0800 2009
    var n  = (Date2.getTime()-Date1.getTime())/(24*60*60*1000);  //323
    var n  = (Date2-Date1)/(24*60*60*1000);   //直接相減得到的是毫秒數(shù)。

     4、dateObj.getDay() 返回 Date 對(duì)象中用本地時(shí)間表示的一周中的日期值。
    getDay 方法所返回的值是一個(gè)處于 0 到 6 之間的整數(shù),它代表了一周中的某一天,返回值與一周中日期的對(duì)應(yīng)關(guān)系如下:

    值 星期
    0 星期天
    1 星期一
    2 星期二
    3 星期三
    4 星期四
    5 星期五
    6 星期六

    此方法可以用來對(duì) ‘工作日’的判斷。


    posted @ 2009-05-16 15:24 斷點(diǎn) 閱讀(87) | 評(píng)論 (0)

    posted @ 2010-01-14 21:29 斷點(diǎn) 閱讀(464) | 評(píng)論 (0)編輯 收藏

    僅列出標(biāo)題
    共18頁: First 上一頁 9 10 11 12 13 14 15 16 17 下一頁 Last 
    主站蜘蛛池模板: 亚洲一级毛片免费观看| 亚洲国产精品无码一线岛国| 99在线视频免费| 免费看片A级毛片免费看| 日本免费人成网ww555在线| 亚洲国产日产无码精品| 国产亚洲精品精品国产亚洲综合| 精品无码一级毛片免费视频观看 | 免费国产a理论片| 国产精品亚洲mnbav网站 | 日韩精品无码免费一区二区三区| 日韩毛片免费一二三| 亚洲日本VA中文字幕久久道具| 亚洲福利精品一区二区三区| 成年人网站在线免费观看| 免费激情网站国产高清第一页 | 亚洲一级免费毛片| 国产一精品一AV一免费| 国产精品高清免费网站| 亚洲av无码片vr一区二区三区| 亚洲精品国产美女久久久| 免费国产不卡午夜福在线| 成人免费视频88| 日本成年免费网站| 18女人水真多免费高清毛片| 免费在线看污视频| 国产在线精品一区免费香蕉| 亚洲熟妇无码av另类vr影视| 亚洲精品你懂的在线观看| 亚洲精品第一国产综合境外资源| 国产又大又粗又硬又长免费| 久久国产精品成人片免费| 国产成人久久精品亚洲小说| 亚洲av成人无码网站…| 亚洲性无码一区二区三区 | 卡一卡二卡三在线入口免费| 精品视频一区二区三区免费| 免费福利电影在线观看| 久久高潮一级毛片免费| 在线观看免费视频网站色| 最好免费观看高清在线|