获得VarChar专栏的最高+1

时间:2017-09-05 04:50:24

标签: sql sql-server tsql

我有一个表,其中包含名为EMPLOYEE_CODE的varchar列中的文本和数字。我想忽略所有文本并获得列中的最高数字,然后+ 1然后我可以分配给新员工。下面的代码可以在INT列上工作但不在VARCHAR上,因为文本我得到以下错误:

  

转换varchar值时转换失败' testusercode'至   数据类型int。

SELECT MAX(EMPLOYEE_CODE) + 1 as Target
FROM [COMPANY].[dbo].[USER]
WHERE EMPLOYEE_CODE + 1 NOT IN (SELECT EMPLOYEE_CODE From dbo.USER)

我猜我必须添加转换或转换为查询但不确定如何

1 个答案:

答案 0 :(得分:2)

您可以使用ISNUMERIC检查号码,获取最大值并添加1。

SELECT MAX(EMPLOYEE_CODE) + 1 as Target
FROM [COMPANY].[dbo].[USER]
WHERE  ISNUMERIC(EMPLOYEE_CODE) = 1

如果您使用的是较新版本的SQL Server,也可以使用

SELECT MAX(EMPLOYEE_CODE) + 1 as Target 
FROM [COMPANY].[dbo].[USER] WHERE TRY_PARSE(EMPLOYEE_CODE AS int) IS NOT NULL

还有TRY_CAST和TRY_CONVERT用于相同的东西。您可以轻松检查哪一个适合您的目的。

https://docs.microsoft.com/en-us/sql/t-sql/functions/try-cast-transact-sql