?
序言:
用户注册时候,录入了全角手机号码,所以导致短信系统根据手机字段发送短信失败,现在问题来了,如何把全角手机号码变成半角手机号码?
1,手机号码全角转换成半角
先查询出来全角半角都存在的手机号码的数据
SELECT a.username ,COUNT(1) AS num
FROM(
SELECT REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(uu.user_name,'0','0'),'1','1'),'2','2'),'3','3'),'4','4') ,'5','5'),'6','6'),'7','7') ,'8','8'),'9','9') AS username
FROM UC_USER uu WHERE uu.`USER_NAME` IS NOT NULL
)a GROUP BY a.username HAVING (COUNT(1)>1)
;
得到如下重复记录:
("MB.134xx76802x" ,
"MB.136xx88105x" ,
"MB.152xx80801x" ,
"MB.157xx49518x" ,
"MB.186xx88282x" ,
"MB.189xx94855x" ); )
然后删除掉已经存在半角的全角手机号码记录,不然转换后会有重复的手机号码。
DELETE FROM `UC_USER`
WHERE MOBILE LIKE '%1%'
AND REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(user_name,'0','0'),'1','1'),'2','2'),'3','3'),'4','4') ,'5','5'),'6','6'),'7','7') ,'8','8'),'9','9')
IN("MB.134xx76802x" ,
"MB.136xx88105x" ,
"MB.152xx80801x" ,
"MB.157xx49518x" ,
"MB.186xx88282x" ,
"MB.189xx94855x" );
之后再修改全角手机号码为半角手机号码
UPDATE UC_USER uu
SET uu.`MOBILE`=REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(uu.`MOBILE`,'0','0'),'1','1'),'2','2'),'3','3'),'4','4') ,'5','5'),'6','6'),'7','7') ,'8','8'),'9','9'),
uu.`USER_NAME`=REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(uu.user_name,'0','0'),'1','1'),'2','2'),'3','3'),'4','4') ,'5','5'),'6','6'),'7','7') ,'8','8'),'9','9')
WHERE uu.`MOBILE` IS NOT NULL;
2,如何把所以的全角转换成半角
上面只是人为用比较笨拙的10个replace将全角转换成了半角,有没有一种通用的思路或者方法来实现呢?于是google了很多资料,写下如下的存储函数。
DELIMITER $$
USE csdn $$
CREATE FUNCTION `csdn`.`func_convert`(p_str VARCHAR(200),flag INT)
RETURNS VARCHAR(200)
BEGIN
DECLARE pat VARCHAR(8);
DECLARE step INT ;
DECLARE i INT ;
DECLARE spc INT;
DECLARE str VARCHAR(200);
SET str=p_str;
IF flag=0 THEN /**全角换算半角*/
SET pat= N'%[!-~]%' ;
SET step= -65248 ;
SET str = REPLACE(str,N' ',N' ');
ELSE /**半角换算全角*/
SET pat= N'%[!-~]%' ;
SET step= 65248 ;
SET str= REPLACE(str,N' ',N' ') ;
END IF;
SET i=LOCATE(pat,str) ;
loop1:WHILE i>0 DO
/**开始将全角转换成半角*/
SET str= REPLACE(str, SUBSTRING(str,i,1), CHAR(UNICODE(SUBSTRING(str,i,1))+step));
SET i=INSTR(str,pat) ;
END WHILE loop1;
RETURN(str)
END $$
DELIMITER ;
3,google出来的sqlserver中的全角半角转换函数。
DELIMITER $$
CREATE
/*[DEFINER = { user | CURRENT_USER }]*/
FUNCTION `test`.`u_convert`(@str NVARCHAR(4000),@flag BIT )
RETURNS NVARCHAR
BEGIN
DECLARE @pat NVARCHAR(8);
DECLARE @step INTEGER;
DECLARE @i INTEGER;
DECLARE @spc INTEGER;
IF @flag=0
BEGIN
SELECT N'%[!-~]%' INTO @pat;
SELECT -65248 INTO @step;
SELECT REPLACE(@str,N' ',N' ') INTO @str;
END
ELSE
BEGIN
SELECT N'%[!-~]%' INTO @pat;
SELECT 65248 INTO @step;
SELECT REPLACE(@str,N' ',N' ') INTO @str;
END
SELECT patindex(@pat COLLATE LATIN1_GENERAL_BIN,@str) INTO @i;
WHILE @i>0 DO
SELECT REPLACE(@str, SUBSTRING(@str,@i,1), NCHAR(UNICODE(SUBSTRING(@str,@i,1))+@step)) INTO @str;
SELECT patindex(@pat COLLATE LATIN1_GENERAL_BIN,@str) INTO @i;
END WHILE
RETURN(@str)
END $$
DELIMITER ;
----------------------------------------------------------------------------------------------------------------
原博客地址: http://blog.itpub.net/26230597/viewspace-1316445/
原作者:黄杉 (mchdba)
----------------------------------------------------------------------------------------------------------------

全角和半角的区别:1、字符的占用空间;2、字符的表示;3、输入法的状态;4、本质区别;5、系统命令的使用。详细介绍:1、字符的占用空间,全角字符占用两个标准字符位置,而半角字符占用一个标准字符位置;2、字符的表示,全角指的是一个字符占用两个标准字符位置,不论是汉字还是其他类型的字符,而半角则是指一个字符占用一个标准的字符位置,通常用于英文字母、数字和符号等等。

在日常生活中,我们经常会遇到全角和半角的问题,但可能很少有人深入了解它们的含义和区别。全角和半角,实际上是一种字符编码方式的概念,而在电脑输入、编辑、排版等方面都有其特殊的应用。本文将深入探讨全角和半角的区别、切换技巧以及在实际生活中的应用。首先,全角和半角在汉字文字领域中的定义是:一个全角字符占用一个字符位置,而一个半角字符占用半个字符位置。在计算机中,通

全角半角是指中文输入法中的两种不同输入状态。全角是指每个字符占用一个全角字符位置,而半角则是每个字符占用一个半角字符位置。在使用电脑输入中文时,有时候需要在全角和半角之间进行切换,以适应不同的输入场景。接下来我们就来介绍几种常用的全角半角切换方法,让大家轻松学会如何在中文输入中进行全角半角的切换。方法一:使用快捷键切换全角半角在大多数中文输入法软件中,可以使

我们在使用中文输入法打字的时候,会有全角和半角两种方式,在这其中还有很多的小伙伴不是很了解全角和半角有什么区别,那下面就来看一下输入法全角和半角的区别吧。半角状态下可以使用任何标点符号,对于空格也没有特殊限制。而在全角状态下,空格键的作用有所变化。切换至全角状态后,按下空格键,我们会发现字符之间的距离变得很大,与半角状态相比,这种间隔更为明显。此外,在全角状态下,英文字母的显示也有所不同。在半角状态下,打出的英文字母大小正常。然而,一旦切换至全角状态,我们会发现打出的英文字母变得加粗且放大。在全

在用户平时运用输入法进行文字插入时,可能会察觉到字母或符号间存在差异,这主要是由于半角与全角符的不同切换导致。这里,将为你详细介绍如何快捷地实现全角与半角之间的转换。windows中全角与半角之间的切换快捷键解决方案一:Alt+Shift此为最常用的全角与半角输入模式切换键。在中文输入环境时,按下此键即转为英语模式,反之则切换至中文状态。若计算机上安装有多语种输入法,同样可通过此键轻松地在各输入法间自由切换。解决方案二:Ctrl+Shift同属全角半角切换快捷键之列。该组合键在英文输入模式下按下

全角空格和半角空格是在中文和日文中常见的两种空格字符,它们在排版、文本编辑以及输入法中具有不同的功能特点。本文将分别详细解释全角空格和半角空格的特点及应用场景,帮助读者更好地理解和使用这两种空格字符。首先,我们先来了解全角空格的特点。全角空格在Unicode中的编码是U+3000,宽度与一般的中文字符相同,通常用于中文排版中的空白处。全角空格的使用场景包括但

在现代的互联网时代,我们经常会在电脑上进行文字输入和编辑工作。在这个过程中,我们有时候会遇到全角和半角的切换问题。全角和半角是指字符所占据的位置大小,全角字符占用一个字符宽度,而半角字符占用半个字符宽度。正确使用全角和半角对于保证文本的格式规范和统一非常重要。因此,掌握全角半角的切换技巧是很有必要的。首先,让我们来了解一下全角和半角的概念。全角字符一般指的是

标题:如何在输入法中轻松切换全角和半角模式在日常使用电脑时,我们常常需要在全角和半角之间进行切换,以适应不同的输入场景和需求。全角模式一般用于输入汉字、英文字符、标点符号和数字等,而半角模式则更适合输入英文和数字。然而,很多人在使用输入法时可能会感到困惑,不知道如何轻松地在全角和半角之间进行切换。本文将介绍一些简单的方法,帮助大家轻松地在输入法中切换全角和半


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

Dreamweaver Mac版
视觉化网页开发工具

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

记事本++7.3.1
好用且免费的代码编辑器