bitsCN.com

数据库系统中,经常有些用户在输入数据的时候会不小心使用全角输入,这就有可能会导致我们的程序出错,如何解决此类问题了。

测试代码:

select cast('111' as int) as num1

select cast('111' as int) as num2

运行结果:

第一个正确显示: 111

第二个则报错: 在将 varchar 值 '111' 转换成数据类型 int 时失败。

下面使用自定义标量函数来解决这个问题:

if object_id(N'u_convert',N'FN') is not null

drop function u_convert

GO

转换原理

全角字符unicode编码从65281~65374

半角字符unicode编码从33~126

空格比较特殊,全角为 12288,半角为 32

而且除空格外,全角/半角按unicode编码排序在顺序上是对应的

所以可以直接通过用+-法来处理非空格数据,对空格单独处理

like的时候,指定排序规则 COLLATE Latin1_General_BIN

是保证字符顺序按unicode编码排序

*/

create function u_convert(

@str nvarchar(4000), --要转换的字符串

@flag bit --转换标志,0转换成半角,1转换成全角

)

returns nvarchar(4000)

AS

begin

declare

@pat nvarchar(8),

@step int,

@i int,

@spc int

if @flag=0

begin

select @pat=N'%[!-~]%',@step=-65248,

@str=replace(@str,N' ',N' ')

end

else

begin

select @pat=N'%[!-~]%',@step=65248,

@str=replace(@str,N' ',N' ')

end

set @i=patindex(@pat collate LATIN1_GENERAL_BIN,@str)

while @i>0

select @str=replace(@str,

substring(

@str,@i,1),

nchar(unicode(substring(@str,@i,1))+@step)),

@i=patindex(@pat collate LATIN1_GENERAL_BIN,@str)

return(@str)

end

GO

测试语句:

select cast('111' as int) as num1

select cast('111' as int) as num2

运行结果:

第一个正确显示: 111

第二个则报错: 在将 varchar 值 '111' 转换成数据类型 int 时失败。

下面使用自定义标量函数来解决这个问题:

if object_id(N'u_convert',N'FN') is not null

drop function u_convert

GO

转换原理

全角字符unicode编码从65281~65374

半角字符unicode编码从33~126

空格比较特殊,全角为 12288,半角为 32

而且除空格外,全角/半角按unicode编码排序在顺序上是对应的

所以可以直接通过用+-法来处理非空格数据,对空格单独处理

like的时候,指定排序规则 COLLATE Latin1_General_BIN

是保证字符顺序按unicode编码排序

*/

create function u_convert(

@str nvarchar(4000), --要转换的字符串

@flag bit --转换标志,0转换成半角,1转换成全角

)

returns nvarchar(4000)

AS

begin

declare

@pat nvarchar(8),

@step int,

@i int,

@spc int

if @flag=0

begin

select @pat=N'%[!-~]%',@step=-65248,

@str=replace(@str,N' ',N' ')

end

else

begin

select @pat=N'%[!-~]%',@step=65248,

@str=replace(@str,N' ',N' ')

end

set @i=patindex(@pat collate LATIN1_GENERAL_BIN,@str)

while @i>0

select @str=replace(@str,

substring(

@str,@i,1),

nchar(unicode(substring(@str,@i,1))+@step)),

@i=patindex(@pat collate LATIN1_GENERAL_BIN,@str)

return(@str)

end

GO

测试语句:bitsCN.com

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

mysql 全角空格_数据库使用技巧――SQL全角与半角切换_MySQL相关推荐

  1. 圆角半角数据库_数据库使用技巧——SQL 全角与半角切换

    select cast('111' as int) as num1 select cast('111' as int) as num2 运行结果: 第一个正确显示: 111 第二个则报错: 在将 va ...

  2. MySql实验嵌套查询_数据库实验:SQL嵌套查询

    自测题: 1.查询哪些课程没有人选修列出课程号和课程名: [code]select cno,cname from course where cno not in( select distinct cn ...

  3. mysql 去除全角空格_去掉全角空格

    有时候复制网上的代码会出现编译不通过的问题,报类似这样的一个问题:error: stray '\161' in program.在网上查了一下,就是全角空格的问题.借助于网上的一段Java代码,把它转 ...

  4. mysql 去除全角空格_去除字符串内多余空格

    倒数第二行 就是去除多余空格  原本最后一种写法是网上找来的 可是根本不好使 \\1  匹配数字1或一次吧 (我有点记不清了) "\s" 匹配非空字符 "\x20&quo ...

  5. java 正则表达式替换多个全角空格为一个半角空格_去掉字符串两端的全角空格和半角空格(含源代码)...

    昨天,遇到了一个技术问题.本来我在程序中用的trim()方法来处理从JSP页面传来的值,后来在测试时,发现当我输入的是全角空格时,trim()方法失效. 需求是这样的,只是去掉字符串两端的空格(不论是 ...

  6. mysql打错了怎么办_数据库出错了怎么办?

    下面是网上收集的多种方法,大家可以测试下. (一) 昨晚浏览自己的Blog的时候,突然发现所有页面都无法显示,到后台查看的时候,发现一个"Table 'xxx' is marked as c ...

  7. 【MySQL 第10章_数据库的设计规范】

    第10章_数据库的设计规范 1. 为什么需要数据库设计 2.范式 2.1范式简介 2.2范式都包括哪些 2.3 键和相关属性的概念 2.4第一范式(1st NF) 2.5 第二范式(2nd NF) 2 ...

  8. java web数据库面试_数据库面试技巧,通过JDBC展示自己专业性,摘自java web轻量级开发面试教程...

    importjava.sql.Connection;2 importjava.sql.DriverManager;3 importjava.sql.ResultSet;4 importjava.sql ...

  9. MySQL删除空值语句_数据库语句sql 删除空记录

    最简单删除SQL Server中所有数据的方法 原文:最简单删除SQL Server中所有数据的方法 最简单删除SQL Server中所有数据的方法   编写人:CC阿爸   2014-3-14 其实 ...

最新文章

  1. 管理邮件用户(附图)---Michaelf
  2. Set Up Optimization
  3. Andorid应用去google广告
  4. python调用chrome插件_Python使用Chrome插件实现爬虫过程图解
  5. .bam.bai的意义_业务活动监视器(BAM)2.0带来的革命
  6. 新浪API, 利用get_uid获取是uid的数据溢出问题解决方案
  7. 详细介绍android rom移植知识普及
  8. BZOJ4659 Lcm
  9. 栅栏密码怎么写java程序_栅栏密码
  10. pdf打印机如何加密pdf文件?
  11. 基于互联网位置数据的通勤特征挖掘技术
  12. 建站|全网最系统的色彩搭配指南,教你制作吸睛网站
  13. 2018年 每日分享一个技术贴
  14. 光纤收发器结构介绍和故障解决
  15. Liferay URL
  16. 阿里校园招聘前端面试
  17. 图像配准(image registration)与图像融合(image fusion)
  18. 【JS 逆向百例】层层嵌套!某加速商城 RSA 加密
  19. 预警| WebLogic Server再曝高危0 day漏洞
  20. 学生报名管理系统的设计与实现

热门文章

  1. dos 命令——切换盘符与切换工作目录
  2. 如何缩小pdf的大小?如何将pdf文件变小一点?
  3. 关于25岁学编程会不会晚的最佳回答!
  4. SDB光猫虚拟服务器,折腾光猫/路由器[MIPS架构](1):用Samba服务器搭建家庭文件共享中心...
  5. 计算机组成:中断向量的相关计算
  6. 配置阿里云镜像源失败
  7. 无胁科技-TVD每日漏洞情报-2022-12-12
  8. 阿里云基于区块链服务构建企业业务系统实践总结
  9. S3C2450自动升级
  10. java.lang.IllegalArgumentException: View=DecorView not attached to window manager(Android Dialog崩溃)