我有一个表,其中包含名为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)
我猜我必须添加转换或转换为查询但不确定如何
答案 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