我使用的是这个代码
(SELECT (MAX(CODE) +1 WHERE ISNUMERIC([code]) = 1)
我想最大值+1只我的列的数字阻止字符字符。
注意:当这个答案发布时,这个问题被标记为MYSQL。
您可以使用substring_index()
来拆分值,然后重新合并它们:
(SELECT CONCAT(SUBSTRING_INDEX(MAX(Code), '-', 1), '-',
SUBSTRING_INDEX(MAX(CODE), '-', -1) + 1
)
FROM . . .
WHERE code LIKE '%NEW-1%'
)
这假设通配符中没有连字符,并且"1"之后的值都是数字。
此外,这不会填充数字为零,但这对此类代码来说是个好主意——它可以确保它们的长度始终相同,并且排序正确。
MAX()函数接受表达式,而不仅仅是列名:
SELECT MAX(CASE ISNUMERIC(code) WHEN 1 THEN code END)+1 as next_code
FROM (
SELECT '15' AS code
UNION ALL SELECT ' 98 ' AS code
UNION ALL SELECT 'New-45' AS code
) foo
WHERE ISNUMERIC(code)=1;
16
(链接到SQL Server 2005,SQL Server 2000的文档显然不再在线,但MAX()
无论如何都属于SQL标准。)