sqlserver 中的字符串和数字转换问题

draculamx 2018-10-25 11:12:45
有一个字段,类型为 nchar(30),里面记录的都是IP地址,如:192.168.1.10

现在我要将每个IP地址最后面的一个数字全部加一,于是我写了如下代码:

update [CRH_DB].dbo.CameraInfo set ip=LEFT(ip,11)+cast(CAST(right(ip,1) as int)+1 as NCHAR)

结果是对的,192.168.1.10 变成了 192.168.1.11

再次执行这条语句,理论上,IP应该变成 192.168.1.12,但实际结果却不是,不论这条语句执行多少次,结果都是 192.168.1.11,没有变化。。。。

后来我再做实验,把每个IP地址最后一个数字减一,于是我写了如下代码:

update [CRH_DB].dbo.CameraInfo set ip=LEFT(ip,11)+cast(CAST(right(ip,1) as int)-1 as NCHAR)

这个代码和加一的代码完全一样,只不过把+1换成了-1,但是结果就跑飞了

结果是:192.168.1.10 变成了 192.168.1.1-1
结果应该是192.168.1.10 才对,为什么变成了192.168.1.1-1。。。。

版本 SQL SERVER 2012
...全文
2021 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
吉普赛的歌 2018-10-25
  • 打赏
  • 举报
回复
DECLARE @s VARCHAR(50)
SET @s='192.168.1.10'
SELECT @s AS old
,PARSENAME(@s,4)+'.'+PARSENAME(@s,3)+'.'+PARSENAME(@s,2)+'.'+ LTRIM((CAST(PARSENAME(@s,1) AS INT)+1))  AS new
/*
old           new
------------- ------------
192.168.1.10  192.168.1.11
 */
update [CRH_DB].dbo.CameraInfo set ip=
PARSENAME(ip,4)+'.'+PARSENAME(ip,3)+'.'+PARSENAME(ip,2)+'.'+ LTRIM((CAST(PARSENAME(ip,1) AS INT)+1))
不需要删除吧, 不要浪费分。
draculamx 2018-10-25
  • 打赏
  • 举报
回复
请版主删除此贴。。
draculamx 2018-10-25
  • 打赏
  • 举报
回复
明白了,我的IP字段中,所有的值,在右侧都有空格。。。。所以RIGHT(IP,1)这个函数,得到的都是空格。。。

27,579

社区成员

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

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