根據 oracle 標准計算超長字符串的長度


    Oracle 數據庫使用 sql語句 :    select lengthb('輸入字符串') from dual  ,  來計算 字符串 所占的字節長度(比如,一個漢字3個字節),但是用這個lengthb函數時,輸入字符串的長度不能超過4000,這樣遇到一些超長字符串就不行了,因此,需要用下面的三個vb.net函數來配合獲取: 

 

Private Function getStrLength_long(strInput As String) As Integer

   'Try

      Dim list_strs As List(Of String) = getList_shortStrs(strInput)

      Dim totalLength As Int16 = 0

      For Each _str In list_strs

                     totalLength += getStrLength_short(_str)

      Next

      Return totalLength

       'Catch ex As Exception

   '    MessageBox.Show("當前輸入的有特殊字符,不容許 " & ex.ToString)

   '    Return 0

  'End Try

End Function

 

    

''' <summary>

'''   這個函數的功能,是將輸入的一個長字符串轉化為 由若干條較短的字符串組成的列表

'''     本函數是為了測算字符串的長度而做配套的,  

'''     oracle在測算字符串長度時,字符串長度不能超過4000個字節,否則會出錯

'''   所以,將一條長字符串轉化為若干條短字符串,對每條短字符串分別測算長度,再累加起來,即長字符串的長度 

''' </summary>

''' <param name="strInput">輸入的一個長字符串</param>

''' <returns></returns>

Private Function getList_shortStrs(strInput As String) As List(OfString)

    Dim lengthValue As Int16 = 1000    '  閾值, 短字符串的長度

   '  之所以定為 1000 ,是因為即使這1000個字符全是漢字,1000 *3 = 3000,仍然小於 4000

    Dim list_strs As List(Of String) = New List(Of String)

    Dim totalLength As Int16 = strInput.Length    '  名義上的總長度

    If totalLength < lengthValue Then  '  如果名義長度 小於 閾值

                 list_strs.Add(strInput)

         Return list_strs   '  返回

     End If

    

       '  現在知道該字符串 的長度 超過閾值了,需要處理

      Dim ii = 0

      While (ii + 1) * lengthValue <= totalLength    '  對長字符串進行 分段

                list_strs.Add(strInput.Substring(ii * lengthValue, lengthValue))

               ii += 1

      End While

     

     '  最后一小段字符串

          list_strs.Add(strInput.Substring(ii * lengthValue, strInput.Length - ii * lengthValue))

      Return list_strs   '   返回

 End Function  

 

 

'    下面這個函數只能對較短的字符串(長度不超過4000)判斷長度

Private Function getStrLength_short(strInput As String) As String       

    If strInput.Length = 0 Then

          Return 0

     End If

         

       '   下面,直接根據Oracle數據庫的判讀字符串長度的方法來判斷

'        lengthb(string)計算string所占的字節長度:     select lengthb('¥') from dual 

      Dim strSql As String = "select lengthb('" & strInput & "') from dual"

 

      Dim rs AsNew ADODB.Recordset

      Dim da As New Data.OleDb.OleDbDataAdapter()

      Dim cmd AsNew ADODB.Command

           cmd.CommandText = strSql

            cmd.ActiveConnection = conn

           cmd.CommandType = CommandType.Text

        

      'Try

                   rs = cmd.Execute()       '  執行

      'Catch ex As Exception

       '    'MessageBox.Show("當前輸入的字符串有特殊字符,無法判斷長度")

       '    Return "過長或特殊字符,無法判斷長度"

       'End Try

 

           If Not rs.EOF Then

               Return rs.Fields(0).Value.ToString

           End If

       

           Return ""

    

End Function


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM