数据库
首页 > 数据库> > 根据 oracle 标准计算超长字符串的长度

根据 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

标签:Dim,End,strInput,list,字符串,超长,oracle,长度
来源: https://www.cnblogs.com/gaoleionline/p/11792419.html