将手机号码的中间四位隐藏掉。(在线等!谢谢各位!)

sunny2004 2006-08-02 09:51:16
数据库里面有几百个号码,用SQL的替换语句将手机号码的中间四位隐去,请问这个语句应该如何写?
...全文
1167 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
gahade 2006-08-02
  • 打赏
  • 举报
回复
telno存的是电话号码.
telno1存的是将中间四位变成*后的号码
这样你每次查的时候直接select telno1 from 表就可以了.

-------------------------------------------------------------------------------------
STUFF
删除指定长度的字符并在指定的起始点插入另一组字符。

语法
STUFF ( character_expression , start , length , character_expression )

参数
character_expression

由字符数据组成的表达式。character_expression 可以是常量、变量,也可以是字符或二进制数据的列。

start

是一个整形值,指定删除和插入的开始位置。如果 start 或 length 是负数,则返回空字符串。如果 start 比第一个 character_expression 长,则返回空字符串。

length

是一个整数,指定要删除的字符数。如果 length 比第一个 character_expression 长,则最多删除到最后一个 character_expression 中的最后一个字符。

返回类型
如果 character_expression 是一个支持的字符数据类型,则返回字符数据。如果 character_expression 是一个支持的 binary 数据类型,则返回二进制数据。

注释
可以嵌套字符串函数。

示例
下例通过在第一个字符串 (abcdef) 中删除从第二个位置(字符 b)开始的三个字符,然后在删除的起始位置插入第二个字符串,创建并返回一个字符串。

SELECT STUFF('abcdef', 2, 3, 'ijklmn')
GO

下面是结果集:

---------
aijklmnef

(1 row(s) affected)

sunny2004 2006-08-02
  • 打赏
  • 举报
回复
我还是不会用
create table #(telno varchar(20),telno1 varchar(20))
insert into #(telno)
select '13512345678'
union all select '78455646'
union all select '86+13178547213'
update #
set telno1 = stuff(telno,len(telno)/2 - 1,4,'****')
from #
select * from #
drop table #

能解释一下吗
gahade 2006-08-02
  • 打赏
  • 举报
回复
真是晕!
加个字段解决turenjie(拉倒) 提出的问题

create table #(telno varchar(20),telno1 varchar(20))
insert into #(telno)
select '13512345678'
union all select '78455646'
union all select '86+13178547213'
update #
set telno1 = stuff(telno,len(telno)/2 - 1,4,'****')
from #
select * from #
drop table #
sunny2004 2006-08-02
  • 打赏
  • 举报
回复
电话号码有几百个,我需要一个批量处理,select @telno = '13512345678'
这个我不能一个一个得去匹配
feitian_BOBO 2006-08-02
  • 打赏
  • 举报
回复
select stuff(手机号列,4,4,'****') as a from 表名
turenjie 2006-08-02
  • 打赏
  • 举报
回复
楼上这位兄台,真是把stuff函数用的炉火纯青!
但是你这样一改的话,把原本的号码都改掉了,请问你怎么恢复??

建议楼主显示的时候,隐掉中间四位,但不要update中间四位!
gahade 2006-08-02
  • 打赏
  • 举报
回复
如果不定长度

create table #(telno varchar(20))
insert into #(telno)
select '13512345678'
union all select '78455646'
union all select '86+13178547213'
update #
set telno = stuff(telno,len(telno)/2 - 1,4,'****')
from #
select * from #
drop table #
fightback 2006-08-02
  • 打赏
  • 举报
回复
该贴保存在记事本上了:)
gahade 2006-08-02
  • 打赏
  • 举报
回复
手机号都是11位的可以这样

declare @telno varchar(11)
select @telno = '13512345678'
select @telno = stuff(@telno,4,4,'****')
print @telno
十一月猪 2006-08-02
  • 打赏
  • 举报
回复
楼主 多看看帮助 ;)

34,873

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧