我有一个db列,其值为100.23.24.1,100.23.24.2,100.23.24.3等。我必须找到最后一个点之后的最后一个数字。在这种情况下,我想要3.然后我想增加最后一个数字并生成新条目为100.23.24.4。我怎样才能做到这一点。有人可以帮忙吗?
我找不到100.23.24。模式,因为这可能会在另一个数据库列中更改,如:100.23.25.1,100.23.25.2。在这种情况下,我应该得到最后一个数字为2
答案 0 :(得分:1)
或正确存储
或正确存储
或stor ...你明白了
答案 1 :(得分:1)
对于SQL Server,下面的查询向您展示了如何提取左侧和右侧部分以构建新值:
DECLARE @ip varchar(20)
SET @ip = '100.23.24.1'
SELECT left(@ip, len(@ip) - charindex('.', reverse(@ip))) + '.' +
cast(right(@ip, charindex('.', reverse(@ip)) - 1) + 1 as varchar(3))
在这种情况下,它将返回100.23.24.2。
答案 2 :(得分:1)
WITH ips AS
(
SELECT '100.23.24.123' AS ip UNION ALL
SELECT '100.23.24.1' AS ip
)
SELECT LEFT(ip, PATINDEX('%' + PARSENAME(ip,1),ip) -1) +
CAST(CAST(PARSENAME(ip,1) AS INT)+1 AS VARCHAR)
FROM ips
答案 3 :(得分:0)
最佳方式:
创建4个微小或小的int值的新列,然后从字符串列填充它们。此时删除字符串列。您现在可以轻松地执行:
UPDATE YourTable Set col4=col4+1 WHERE col4=3
如果您愿意,可以添加计算列以将4个值连接回字符串,以支持旧代码。
--set up existing table
create table YourTable (YourColumn varchar(20))
INSERT YourTable VALUES ('100.23.24.1')
INSERT YourTable VALUES ('100.23.24.2')
INSERT YourTable VALUES ('100.23.24.3')
INSERT YourTable VALUES ('100.23.24.9')
--add in new columns
ALTER TABLE YourTable ADD Col1 int null
ALTER TABLE YourTable ADD Col2 int null
ALTER TABLE YourTable ADD Col3 int null
ALTER TABLE YourTable ADD Col4 int null
--populate the new columns, split apart the string
UPDATE YourTable
SET Col1=PARSENAME(YourColumn,4)
,Col2=PARSENAME(YourColumn,3)
,Col3=PARSENAME(YourColumn,2)
,Col4=PARSENAME(YourColumn,1)
--remove the string column
ALTER TABLE YourTable drop column YourColumn
--add back the string column as a computed column
ALTER TABLE dbo.YourTable ADD YourColumn AS CONVERT(varchar(10),Col1)+'.'+CONVERT(varchar(10),Col2)+'.'+CONVERT(varchar(10),Col3)+'.'+CONVERT(varchar(10),Col4)
--show the table's contents
select * from YourTable
输出:
Col1 Col2 Col3 Col4 YourColumn
----------- ----------- ----------- ----------- -------------
100 23 24 1 100.23.24.1
100 23 24 2 100.23.24.2
100 23 24 3 100.23.24.3
100 23 24 9 100.23.24.9
(4 row(s) affected)
这是一个快速暴力表扫描方式:
UPDATE YourTable
SET YourColumn=LEFT(YourColumn,LEN(YourColumn)-2)+'.4'
WHERE LEFT(REVERSE(YourColumn),2)='3.'
示例代码:
declare @YourTable table (YourColumn varchar(20))
INSERT @YourTable VALUES ('100.23.24.1')
INSERT @YourTable VALUES ('100.23.24.2')
INSERT @YourTable VALUES ('100.23.24.3')
INSERT @YourTable VALUES ('100.23.24.9')
UPDATE @YourTable
SET YourColumn=LEFT(YourColumn,LEN(YourColumn)-2)+'.4'
WHERE LEFT(REVERSE(YourColumn),2)='3.'
select * from @YourTable
输出:
YourColumn
--------------------
100.23.24.1
100.23.24.2
100.23.24.4
100.23.24.9