根据 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
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
根据 oracle 标准计算超长字符串的长度的更多相关文章
- JS计算文本字符串字节长度和像素长度的方法
来源:js获取字符长度并计算px宽度 - [云]风过无痕 - 博客园 (cnblogs.com) <!DOCTYPE html> <html lang="en"& ...
- PHP 统计中文字符串的长度
中文网站一般会选择两种编码:gbk/gb2312或是utf-8. gbk编码下每个中文字符所占字节为2,例: $zhStr = ‘您好,中国!’; echo strlen($zhStr); // 输出 ...
- Oracle 超长字符串分割劈分
Oracle 超长字符串分割劈分,具体能有多长没测过,反正很大.... 下面,,,,直奔主题了: CREATE OR REPLACE FUNCTION splitstr(p_string IN clo ...
- 应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) String.prototype.len=function(){return this.replace(/[^\x00-\xff]/g,"aa").length;}
应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) String.prototype.len=function(){return this.replace(/[^\x00-\xff] ...
- PHP计算字符串的长度
<?php /** * 计算字符串的长度(汉字按照两个字符计算) * * @param string $str 字符串 * * @return int */ function str_len($ ...
- JS计算字符串的长度
最近项目上经常要用到计算字符串的长度的问题,有时需要按照byte进行计算长度,所以我就想在页面上用js实现,于是就到网上查了相关的资料,发现确实有很多的版本,这里给出两个比较好用的. //方法一:逐个 ...
- js混合计算字符串字节长度
js混合计算字符串字节长度 function getBt(str) { ) { var char = str.match(/[^\x00-\xff]/ig); : char.length); } el ...
- Java 按字节计算字符串的长度
在<从后向前截取指定长度的字符串>中介绍了如何截取字符串,本文介绍如何统计字符串的字节长度. import org.slf4j.Logger; import org.slf4j.Lo ...
- SqlSever基础 len函数 计算前后都有空格的字符串的长度时
镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...
随机推荐
- MongoDB学习笔记(六)
初识 MongoDB 中的索引 索引就像图书的目录一样,可以让我们快速定位到需要的内容,关系型数据库中有索引,NoSQL 中当然也有,本文我们就先来简单介绍下 MongoDB 中的索引. 索引创建 默 ...
- 新的部署架构之下,如何拿shell?
和朋友聊起一个话题,服务器部署架构升级对安全的影响.从最简单的一台服务器,到应用.数据库.文件服务器分离:从本地机房服务器到云服务器产品矩阵:从虚拟化到容器化部署,一直在往更安全的方向改变. 本文试图 ...
- js、jscore与webkit、nodejs的关系
js:编程语言 jscore:js语言的解释执行引擎,代表cpu: webkit.nodejs:js语言的运行平台,代表操作系统.计算机资源.
- 开源矿工工具箱新增了ETH反抽水工具
开源矿工工具箱新增了ETH反抽水工具 —— 将决定使用Claymore挖ETH时拦截的老外的抽水归谁的权力交给矿工 众所周知,所有的挖矿辅助工具都拦截了老外的Claymore内核挖ETH时的内核开发费 ...
- 解决Web部署 svg/woff/woff2字体 404
1.打开服务器IIS管理器,找到MIME类型 2.添加类型 文件扩展名 MIME类型 .svg image/svg+xml.woff appli ...
- wcf序列化嵌套类(如TreeNode)异常原因
循环引用类在WCF中的传递 循环引用类在WCF中的传递问题,例如: [DataContract] public class AB { public string name { ...
- 基于Golang的逃逸分析(Language Mechanics On Escape Analysis)
何为逃逸分析 在编译程序优化理论中,逃逸分析是一种确定指针动态范围的方法——分析在程序的哪些地方可以访问到指针.它涉及到指针分析和形状分析. 当一个变量(或对象)在子程序中被分配时,一个指向变量的指针 ...
- 浅谈Vue.js2.0核心思想
Vue.js是一个提供MVVM数据双向绑定的库,专注于UI层面,核心思想是:数据驱动.组件系统. 数据驱动: Vue.js数据观测原理在技术实现上,利用的是ES5Object.defineProper ...
- QT绘制B样条曲线
² 贝塞尔曲线 贝塞尔曲线是通过一组多边折线的各顶点来定义.在各顶点中,曲线经过第一点和最后一点,其余各点则定义曲线的导数.阶次和形状.第一条和最后一条则表示曲线起点和终点的切线方向. ² B样条 ...
- group by 两个字段
group by 的简单说明: group by 一般和聚合函数一起使用才有意义,比如 count sum avg等 使用group by的两个要素: (1) 出现在select后面的字段 要么 ...