小程序員之歌
            java先(我應該為它寫點什么了?。?/div>

            oracle 取子串(轉)

            SUBSTRING
            返回字符、binary、text      或      image      表達式的一部分。有關可與該函數一起使用的有效      Microsoft®      SQL      Server™      數據類型的更多信息,請參見數據類型。 

            語法
            SUBSTRING      (      expression      ,      start      ,      length      ) 

            參數
            expression

            是字符串、二進制字符串、text、image、列或包含列的表達式。不要使用包含聚合函數的表達式。

            start

            是一個整數,指定子串的開始位置。

            length

            是一個整數,指定子串的長度(要返回的字符數或字節數)。

            substring()
            ——任意位置取子串

            left()
            right()
            ——左右兩端取子串

            ltrim()
            rtrim()
            ——截斷空格,沒有trim()。

            charindex()
            patindex()
            ——查子串在母串中的位置,沒有返回0。區別:patindex支持通配符,charindex不支持。


            函數功效:
            字符串截取函數,只限單字節字符使用(對于中文的截取時遇上奇數長度是會出現亂碼,需另行處理),本函數可截取字符串指定范圍內的字符。

            應用范圍:
            標題、內容截取

            函數格式:
            string substr ( string string, int start [, int length])
            參數1:處理字符串
            參數2:截取的起始位置(第一個字符是從0開始)
            參數3:截取的字符數量
            substr()更多介紹可在PHP官方手冊中查詢(字符串處理函數庫)

            舉例:
            substr("ABCDEFG", 0);    //返回:ABCDEFG,截取所有字符
            substr("ABCDEFG", 2);    //返回:CDEFG,截取從C開始之后所有字符
            substr("ABCDEFG", 0, 3); //返回:ABC,截取從A開始3個字符
            substr("ABCDEFG", 0, 100); //返回:ABCDEFG,100雖然超出預處理的字符串最長度,但不會影響返回結果,系統按預處理字符串最大數量返回。
            substr("ABCDEFG", 0, -3); //返回:EFG,注意參數-3,為負值時表示從尾部開始算起,字符串排列位置不變


            例子:


            1.截取已知長度的函數


              A.截取從字符串左邊開始N個字符

                Declare @S1 varchar(100)
                Select @S1='http://www.163.com'
                Select Left(@S1,4)
                ------------------------------------
                顯示結果: http


              B.截取從字符串右邊開始N個字符(例如取字符www.163.com)

                Declare @S1 varchar(100)
                Select @S1='http://www.163.com'
                Select right(@S1,11) 
                ------------------------------------
                顯示結果: www.163.com


              C.截取字符串中任意位置及長度(例如取字符www)

                Declare @S1 varchar(100)
                Select @S1='http://www.163.com'
                Select SUBSTRING(@S1,8,3) 
                ------------------------------------
                顯示結果: www.163.com

                以上例子皆是已知截取位置及長度,下面介紹未知位置的例子

            2.截取未知位置的函數


              A.截取指定字符串后的字符串(例如截取http://后面的字符串)

                方法一:

                Declare @S1 varchar(100)
                Select @S1='http://www.163.com' 
                Select Substring(@S1,CHARINDEX('www',@S1)+1,Len(@S1))
                /*此處也可以這樣寫:Select Substring(@S1,CHARINDEX('//',@S1)+2,Len(@S1))*/
                ------------------------------------
                顯示結果: www.163.com


                需要注意:CHARINDEX函數搜索字符串時,不區分大小寫,因此CHARINDEX('www',@S1)也可以寫成CHARINDEX('WWW',@S1)

                方法二:(與方法一類似)

                Declare @S1 varchar(100)
                Select @S1='http://www.163.com' 
                Select Substring(@S1,PATINDEX('%www%',@S1)+1,Len(@S1))
                --此處也可以這樣寫:Select Substring(@S1,PATINDEX('%//%',@S1)+2,Len(@S1))
                ------------------------------------
                顯示結果: www.163.com 


              函數PATINDEX與CHARINDEX區別在于:前者可以參數一些參數,增加查詢的功能

                方法三:

                Declare @S1 varchar(100)
                Select @S1='http://www.163.com' 
                Select REPLACE(@S1,'http://','')
                ------------------------------------
                顯示結果: www.163.com


              利用字符替換函數REPLACE,將除需要顯示字符串外的字符替換為空

                方法四:

                Declare @S1 varchar(100)
                Select @S1='http://www.163.com' 
                Select STUFF(@S1,CHARINDEX('http://',@S1),Len('http://'),'')
                ------------------------------------
                顯示結果: www.163.com 

              函數STUFF與REPLACE區別在于:前者可以指定替換范圍,而后者則是全部范圍內替換

              B.截取指定字符后的字符串(例如截取C:\Windows\test.txt中文件名)
                  與A不同的是,當搜索對象不是一個時,利用上面的方法只能搜索到第一個位置

                方法一:

                Declare @S1 varchar(100)
                Select @S1='C:\Windows\test.txt'
                select right(@S1,charindex('\',REVERSE(@S1))-1)
                -------------------------------------
                顯示結果: text.txt


            利用函數REVERSE獲取需要截取的字符串長度

             


            substr()


            例子:

            private void DDL_AreaBind()
                      {
                          conn = new SqlConnection(ConfigurationManager.ConnectionStrings["strcon"].ConnectionString);
                          string str = "0000";
                          cmd = new SqlCommand("select AreaID,Name=ltrim(Name) from Area where    right(AreaID,4) ='" + str + "'", conn);
                          SqlDataAdapter sda = new SqlDataAdapter(cmd);
                          sda.Fill(ds, "area");
                          this.ddl_area.DataSource = ds.Tables["area"].DefaultView;
                          this.ddl_area.DataTextField = "Name";
                          this.ddl_area.DataValueField = "AreaID";
                          this.ddl_area.DataBind();

                       
                          cmd = new SqlCommand("select * from Area    ", conn);
                          cmd.CommandType = CommandType.Text;
                          SqlDataAdapter adapter = new SqlDataAdapter(cmd);
                          adapter.Fill(ds, "city");
                          this.ddl_city.DataSource = ds.Tables["city"].DefaultView;
                          this.ddl_city.DataTextField = "Name";
                          this.ddl_city.DataValueField = "AreaID";
                          this.ddl_city.DataBind();
                      }


            protected void ddl_area_SelectedIndexChanged(object sender, EventArgs e)
                      {
                          conn = new SqlConnection(ConfigurationManager.ConnectionStrings["strcon"].ConnectionString);
                          this.ddl_city.Enabled = true;
                          string str1="0000";
                          cmd = new SqlCommand("select AreaID,Name from Area where substring(AreaID,1,2)='" + this.ddl_area.SelectedValue.Substring(0,2)    + "' AND substring(AreaID,3,4) <> '0000' AND substring(AreaID,5,2)='00'    ", conn);
                          cmd.CommandType = CommandType.Text;
                          SqlDataAdapter adapter = new SqlDataAdapter(cmd);
                          DataSet ds = new DataSet();
                          adapter.Fill(ds, "city");
                          this.ddl_city.DataSource = ds.Tables["city"].DefaultView;
                          this.ddl_city.DataTextField = "Name";
                          this.ddl_city.DataValueField = "AreaID";
                          this.ddl_city.DataBind();
                      }

            posted on 2009-03-10 16:33 liujg 閱讀(3110) 評論(3)  編輯  收藏 所屬分類: 數據庫

            評論

            # re: oracle 取子串(轉)[未登錄] 2011-04-15 16:06 aaa

            kao  回復  更多評論   

            # re: oracle 取子串(轉)[未登錄] 2011-04-15 16:07 aaa

            樓主,你說的substring是在oracle哪個版本的???能用嗎???
            charindex又是哪里的函數,能用嗎????搞笑  回復  更多評論   

            # re: oracle 取子串(轉) 2011-07-06 22:04 liujg

            @aaa
            別處轉來的,具體的不懂。  回復  更多評論   

            新用戶注冊  刷新評論列表  

            只有注冊用戶登錄后才能發表評論。


            網站導航:
            博客園   IT新聞   Chat2DB   C++博客   博問   管理
            相關文章:
            • (轉)pl/sql developer 中文字段顯示亂碼
            • (轉)Oracle Sequence Cache 參數說明
            • (轉)
            • (轉)表空間不足的問題
            • oracle 取子串(轉)
            • PL/SQL中用光標查詢多條記錄
            • 漫 談oracle 中 的 空 值(轉)
            • PowerDesigner 使用 (轉載)
            • SQL 查找重復記錄(轉)
             

            Powered by:
            BlogJava
            Copyright © liujg

            <2025年5月>
            日一二三四五六
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            導航

            • BlogJava
            • 首頁
            • 新隨筆
            • 聯系
            • 聚合
            • 管理

            統計

            • 隨筆 - 10
            • 文章 - 40
            • 評論 - 6
            • 引用 - 0

            常用鏈接

            • 我的隨筆
            • 我的評論
            • 我的參與
            • 最新評論

            留言簿(1)

            • 給我留言
            • 查看公開留言
            • 查看私人留言

            隨筆分類

            • js (rss)
            • linux(1) (rss)
            • strus2 (rss)
            • Struts2 Tag語法(轉) (rss)

            隨筆檔案

            • 2014年12月 (1)
            • 2011年9月 (1)
            • 2011年5月 (2)
            • 2011年1月 (1)
            • 2007年11月 (1)
            • 2007年10月 (1)
            • 2007年5月 (1)
            • 2006年12月 (1)

            文章分類

            • Java基礎(10) (rss)
            • JDBC(1) (rss)
            • js(1) (rss)
            • portlet(1) (rss)
            • Tapestry(1) (rss)
            • 數據庫(9) (rss)
            • 算法(1) (rss)

            文章檔案

            • 2011年10月 (1)
            • 2011年5月 (2)
            • 2011年1月 (1)
            • 2010年12月 (1)
            • 2010年8月 (1)
            • 2010年7月 (1)
            • 2010年5月 (2)
            • 2010年4月 (1)
            • 2009年7月 (1)
            • 2009年4月 (1)
            • 2009年3月 (2)
            • 2009年1月 (2)
            • 2008年12月 (1)
            • 2008年11月 (1)
            • 2008年7月 (3)
            • 2008年4月 (2)
            • 2008年3月 (2)
            • 2008年1月 (2)
            • 2007年11月 (3)
            • 2007年7月 (1)
            • 2007年6月 (4)
            • 2007年1月 (1)
            • 2006年7月 (4)

            相冊

            • me

            收藏夾

            • rmi(5) (rss)

            boddiy

            • boddi's blog

            搜索

            •  

            最新評論

            • 1.?re: oracle 取子串(轉)
            • @aaa
              別處轉來的,具體的不懂。
            • --liujg
            • 2.?re: oracle 取子串(轉)[未登錄]
            • 樓主,你說的substring是在oracle哪個版本的???能用嗎???
              charindex又是哪里的函數,能用嗎????搞笑
            • --aaa
            • 3.?re: oracle 取子串(轉)[未登錄]
            • kao
            • --aaa
            • 4.?re: prototype詳解(轉)
            • 郁悶,.NET的!,JAVA里面有MemberwiseClone這個方法么。怎么用JAVA搞原型模式呢?
            • --hehei
            • 5.?re: 轉載一篇jms的文章
            • Thanks for you kind to share the article~~
            • --lingruoxu

            閱讀排行榜

            • 1.?java程序員的5個好習慣()(805)
            • 2.?java 關閉IE(586)
            • 3.?OERR: ORA-12519(563)
            • 4.?doGet()和doPost()的區別(轉)(482)
            • 5.?看了下java核心技術中的代理,還是很暈(398)

            評論排行榜

            • 1.?執行./startup.sh,或者./shutdown.sh的時候,爆出了Permission denied(0)
            • 2.?submit()和onsubmit()的區別(轉)(0)
            • 3.?doGet()和doPost()的區別(轉)(0)
            • 4.?轉載 Vim 基本用法(0)
            • 5.?OERR: ORA-12519(0)
            狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频
            主站蜘蛛池模板: 白城市| 莆田市| 普宁市| 同江市| 名山县| 晋江市| 安宁市| 会泽县| 湖口县| 东明县| 恭城| 尼玛县| 榕江县| 陵水| 宜宾市| 蒙山县| 洛宁县| 大石桥市| 灵寿县| 子长县| 塔河县| 二手房| 息烽县| 遂平县| 灵寿县| 西平县| 芒康县| 安泽县| 焦作市| 大方县| 阿克苏市| 郑州市| 阳东县| 景洪市| 广宗县| 神池县| 呼图壁县| 南皮县| 阿勒泰市| 晋宁县| 临安市|