我有两个标识用户的字段,一个是Integer,一个是varchar(10),格式为'AA111X',其中前两个是alpha,最后一个x是字母数字,需要将其转换为整数作为整数字段的转换。这个整数值过去是为我们提供的,但现在不再提供了。答案很可能是这是不可能的,并且必须使用查找表,但是如果可能的话,我试图避免模式更改。
是否有必要实际上将前两个字符视为某些值基26,并将最后一个字符视为某些值基36?还是只需要为任何可能的输入生成唯一的整数,以便在必要时可以转换回来?
如果是后者,并且如果现有值被认为不区分大小写,则此解决方案将始终产生适合4字节整数的值:
declare @val varchar(10) = 'zz111z';
select cast(
concat(
ascii(substring(val, 1, 1)),
ascii(substring(val, 2, 1)),
substring(val, 3, 3),
ascii(substring(val, 6, 1))
)
as int
)
from (select upper(@val)) v(val);