SQL 从数据类型 nvarchar 转换为 bigint 时出错 在线等待

虞汶霖 2017-04-30 10:23:59
update ttt set Telephone= convert(nvarchar,convert(bigint,Telephone)+1)
SQL 从数据类型 nvarchar 转换为 bigint 时出错

Telephone
17234307473
15234354343
13234359727
15234324072
13234353937

想直接用SQL直接把存电话号码那个字段,每个电话号码+1。怎么写?在线等待!!!
...全文
1594 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
道素 2017-05-02
  • 打赏
  • 举报
回复

create table #tb(Telephone nvarchar(50))
insert into #tb
select '17234307473' union all
select '15234354343' union all
select '13234359727' union all
select N'无' union all
select '15234324072' union all
select '13234353937'


update #tb set Telephone= case when isnumeric(Telephone)=1 then  convert(nvarchar,convert(bigint,Telephone)+1) else Telephone end
select * from #tb
 

  	Telephone
1	17234307474
2	15234354344
3	13234359728
4	无
5	15234324073
6	13234353938

二月十六 2017-05-01
  • 打赏
  • 举报
回复
好吧,50试着也没事
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([Telephone] NVARCHAR(50))
Insert #T
select '17234307473' union all
select '15234354343' union all
select '13234359727' union all
select '15234324072' union all
select '13234353937'
Go
--测试数据结束
UPDATE #T
SET Telephone = CONVERT(NVARCHAR, CONVERT(BIGINT, Telephone) + 1);
SELECT * FROM #T


虞汶霖 2017-05-01
  • 打赏
  • 举报
回复
引用 6 楼 sinat_28984567 的回复:
之前Telephone的格式是什么?试了一下nvarchar(100)的没问题
--测试数据
if not object_id(N'Tempdb..#T') is null
	drop table #T
Go
Create table #T([Telephone] NVARCHAR(100))
Insert #T
select '17234307473' union all
select '15234354343' union all
select '13234359727' union all
select '15234324072' union all
select '13234353937'
Go
--测试数据结束
UPDATE  #T
SET     Telephone = CONVERT(NVARCHAR, CONVERT(BIGINT, Telephone) + 1);
SELECT * FROM #T
从数据类型 nvarchar 转换为 bigint 时出错。 还是报错 Telephone nvarchar(50)
虞汶霖 2017-05-01
  • 打赏
  • 举报
回复
引用 5 楼 3150379 的回复:

UPDATE  ttt
SET     Telephone = LEFT(Telephone, 6) + RIGHT('0'
                                               + CAST(CAST(RIGHT(Telephone, 5) AS INT)
                                               + 1 AS NVARCHAR(5)), 5);
以这个为准吧,刚才有一种情况未考虑在内
在将 nvarchar 值 '无' 转换成数据类型 int 时失败。 还是不行
jxwangjm 2017-05-01
  • 打赏
  • 举报
回复
在将 nvarchar 值 '无' 转换成数据类型 int 时失败。 也就是说某些行中Telephone字段为空,所以应该加上where telephone is not null
五维思考 2017-04-30
  • 打赏
  • 举报
回复

UPDATE  ttt
SET     Telephone = LEFT(Telephone, 6) + RIGHT('0'
                                               + CAST(CAST(RIGHT(Telephone, 5) AS INT)
                                               + 1 AS NVARCHAR(5)), 5);
以这个为准吧,刚才有一种情况未考虑在内
五维思考 2017-04-30
  • 打赏
  • 举报
回复
这个再不行,你的数据库服务器该砸了
五维思考 2017-04-30
  • 打赏
  • 举报
回复

UPDATE  ttt
SET     Telephone = LEFT(Telephone, 6)
        + CAST(CAST(RIGHT(Telephone, 5) AS INT) + 1 AS NVARCHAR(5));
虞汶霖 2017-04-30
  • 打赏
  • 举报
回复
引用 1 楼 3150379 的回复:

UPDATE ttt SET Telephone= CONVERT(NVARCHAR(11),CONVERT(BIGINT,Telephone)+1) 
从数据类型 nvarchar 转换为 bigint 时出错。 还是不行。
五维思考 2017-04-30
  • 打赏
  • 举报
回复

UPDATE ttt SET Telephone= CONVERT(NVARCHAR(11),CONVERT(BIGINT,Telephone)+1) 
二月十六 2017-04-30
  • 打赏
  • 举报
回复
之前Telephone的格式是什么?试了一下nvarchar(100)的没问题
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([Telephone] NVARCHAR(100))
Insert #T
select '17234307473' union all
select '15234354343' union all
select '13234359727' union all
select '15234324072' union all
select '13234353937'
Go
--测试数据结束
UPDATE #T
SET Telephone = CONVERT(NVARCHAR, CONVERT(BIGINT, Telephone) + 1);
SELECT * FROM #T


27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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