oracle中字符串长度计算,根据 oracle 标准计算超长字符串的长度

Oracle 数据库使用 sql语句 :    select lengthb('输入字符串') from dual  ,  来计算 字符串 所占的字节长度(比如,一个汉字3个字节),但是用这个lengthb函数时,输入字符串的长度不能超过4000,这样遇到一些超长字符串就不行了,因此,需要用下面的三个vb.net函数来配合获取:

PrivateFunctiongetStrLength_long(strInputAsString)AsInteger

'Try

Dimlist_strsAsList(OfString) = getList_shortStrs(strInput)

DimtotalLengthAsInt16= 0

ForEach_strInlist_strs

totalLength += getStrLength_short(_str)

Next

ReturntotalLength

'Catch ex As Exception

'    MessageBox.Show("当前输入的有特殊字符,不容许 " & ex.ToString)

'    Return 0

'End Try

EndFunction

'''

'''   这个函数的功能,是将输入的一个长字符串转化为 由若干条较短的字符串组成的列表

'''     本函数是为了测算字符串的长度而做配套的,

'''     oracle在测算字符串长度时,字符串长度不能超过4000个字节,否则会出错

'''   所以,将一条长字符串转化为若干条短字符串,对每条短字符串分别测算长度,再累加起来,即长字符串的长度

'''

'''输入的一个长字符串

'''

PrivateFunctiongetList_shortStrs(strInputAsString)AsList(OfString)

DimlengthValueAsInt16= 1000'  阈值, 短字符串的长度

'  之所以定为 1000 ,是因为即使这1000个字符全是汉字,1000 *3 = 3000,仍然小于 4000

Dimlist_strsAsList(OfString) =NewList(OfString)

DimtotalLengthAsInt16= strInput.Length'  名义上的总长度

IftotalLength < lengthValueThen'  如果名义长度 小于 阈值

list_strs.Add(strInput)

Returnlist_strs'  返回

EndIf

'  现在知道该字符串 的长度 超过阈值了,需要处理

Dimii = 0

While(ii + 1) * lengthValue <= totalLength'  对长字符串进行 分段

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

ii += 1

EndWhile

'  最后一小段字符串

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

Returnlist_strs'   返回

EndFunction

'    下面这个函数只能对较短的字符串(长度不超过4000)判断长度

PrivateFunctiongetStrLength_short(strInputAsString)AsString

IfstrInput.Length = 0Then

Return0

EndIf

'   下面,直接根据Oracle数据库的判读字符串长度的方法来判断

'        lengthb(string)计算string所占的字节长度:     select lengthb('¥') from dual

DimstrSqlAsString="select lengthb('"& strInput &"') from dual"

DimrsAsNewADODB.Recordset

DimdaAsNewData.OleDb.OleDbDataAdapter()

DimcmdAsNewADODB.Command

cmd.CommandText = strSql

cmd.ActiveConnection = conn

cmd.CommandType = CommandType.Text

'Try

rs = cmd.Execute()       '  执行

'Catch ex As Exception

'    'MessageBox.Show("当前输入的字符串有特殊字符,无法判断长度")

'    Return "过长或特殊字符,无法判断长度"

'End Try

IfNotrs.EOFThen

Returnrs.Fields(0).Value.ToString

EndIf

Return""

EndFunction

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值