我必须从给定的数字中提取下一个数字。我的表包含如下数字。主要产品最后总是带有.1,可以包含或不包含他的子产品,例如:
07.0001.1 (main product)
07.0001.2 (his sub)
07.0001.3 (his sub)
etc..
01.1453.1
01.1453.2
03.3456.1
03.3456.2
03.3456.3
03.5436.1
03.5436.2
03.5436.3
03.5436.4
12.7839.1
12.7839.2
12.3232.1
12.4444.1
12.4444.2
13.7676.1
我想首先将一个数字的数字传递给查询,然后根据该数字得到所有以该数字开头的数字,然后获得接下来四个中的最高数字并返回此数字+ 1.
因此,如果我说12
,我们会采取以上示例输入,那么它应该找到此产品:12.7839.x
并返回12.7839 + 1
所以12.7840
另一个例子,如果我说03
那么应该找03.5436
所以03.5436 + 1
所以应该返回03.5437
希望你知道我的意思。
我对SQL并不熟悉,但这就是我的目标:
select * from tbArtikel where Nummer LIKE '12.%'
答案 0 :(得分:2)
这是实现预期结果的另一种替代方案。提供传递要查询的号码的选项。请考虑以下SQL语句
CREATE TABLE tblDummyExample
(
Number VARCHAR(64)
)
INSERT INTO tblDummyExample
VALUES ('07.0001.1')
, ('07.0001.2')
, ('07.0001.3')
, ('01.1453.1')
, ('01.1453.2')
, ('03.3456.1')
, ('03.3456.2')
, ('03.3456.3')
, ('03.5436.1')
, ('03.5436.2')
, ('03.5436.3')
, ('03.5436.4')
, ('12.7839.1')
, ('12.7839.2')
, ('12.3232.1')
, ('12.4444.1')
, ('12.4444.2')
, ('13.7676.1')
DECLARE @startWith VARCHAR(2) = '12' -- provide any number as input
SELECT @startWith + '.'+ CAST((MAX(CAST(SUBSTRING(ex.Number, (CHARINDEX('.', ex.Number, 1) + 1), (CHARINDEX('.', ex.Number, (CHARINDEX('.', ex.Number, 1) + 1)) - (CHARINDEX('.', ex.Number, 1) + 1))) AS INT)) + 1) AS VARCHAR(16))
FROM tblDummyExample ex
WHERE ex.Number LIKE @startWith+'%'
我确定,此解决方案不限于任何特定的SQL Server版本。
答案 1 :(得分:0)
试试这个,提取前两个部分,将第二个转换为数值,添加一个并再次转换回字符串:
select
parsename(max(nummer), 3) + '.' -- 03
+ ltrim(max(cast(parsename(nummer, 2) as int) +1)) -- 5436 -> 5437
+ '.1'
from tbArtikel
where Nummer LIKE '03.%'
答案 2 :(得分:0)
试试这个,
DECLARE @table TABLE (col VARCHAR(10))
INSERT INTO @table
VALUES ('01.1453.1')
,('01.1453.2')
,('03.3456.1')
,('03.3456.2')
,('03.3456.3')
,('03.5436.1')
,('03.5436.2')
,('03.5436.3')
,('03.5436.4')
,('12.7839.1')
,('12.7839.2')
,('12.3232.1')
,('12.4444.1')
,('12.4444.2')
,('13.7676.1')
SELECT TOP 1 left(col, charindex('.', col, 1) - 1) + '.' + convert(VARCHAR(10), convert(INT, substring(col, charindex('.', col, 1) + 1, charindex('.', col, charindex('.', col, 1) + 1) - (charindex('.', col, 1) + 1))) + 1)
FROM @table
WHERE col LIKE '03.%'
ORDER BY 1 DESC