[英]Convert a letter into a number
我正在构建处理大量数据的Web应用程序的后端,前端开发人员正在寻找稳定的整数代码以用于连接数据。
他们尝试使用的当前整数值是代理键,代理键将不断更改,从而导致许多问题。 每个表都有一个字母数字代码,我正在寻找一种可以将其转换为稳定的int的方法。
EG将代码“ AAAA”转换为1111或MMMM转换为13131313
谁能告诉我这是否有可能。
谢谢,
McNets的评论似乎是一个很好的方法。
如果可以确定,您有
您可以将字符串转换为VARBINARY(4)
并将其转换为INT
:
DECLARE @dummy TABLE(StrangeCode VARCHAR(10));
INSERT INTO @dummy VALUES
('AAAA'),('MMMM'),('ACAC'),('CDEF'),('ABCD');
SELECT CAST(CAST(StrangeCode AS VARBINARY(4)) AS INT)
FROM @dummy;
结果
1094795585
1296911693
1094926659
1128547654
1094861636
如果您需要更大的电话号码,可以使用BIGINT
一种使用CTE的方法如下:
;with tt(i, c1, c2) as (
select 1, c, replace(c,char(65), 1)
from yourTable
union all
select i+1, c1, c2= replace(c2,char(65+i), i+1)
from tt
where i < 26
)
select c1, cast(c2 as bigint) num
from tt
where i = 26;
正如McNets建议的那样,创建第二个表:
create table IntCodes (id INT IDENTITY(1,1), UserCode VARCHAR(50) NOT NULL)
insert into IntCodes (UserCode)
select distinct UserCode
from MyTable
您需要一个触发器:
create trigger Trg_UserCode
on MyTable
after insert as
begin
insert into IntCodes (UserCode)
select i1.UserCode
from INSERTED i1
where i1.UserCode not in (select ic.Usercode from IntCodes ic)
end
现在,作为查询的一部分:
select t1.*, t2.id as IntCode
from MyTable t1
inner join IntCodes t2
on t1.UserCode = t2.UserCode
这意味着您无需担心更新现有列
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.