繁体   English   中英

将字母转换为数字

[英]Convert a letter into a number

我正在构建处理大量数据的Web应用程序的后端,前端开发人员正在寻找稳定的整数代码以用于连接数据。

他们尝试使用的当前整数值是代理键,代理键将不断更改,从而导致许多问题。 每个表都有一个字母数字代码,我正在寻找一种可以将其转换为稳定的int的方法。

EG将代码“ AAAA”转换为1111或MMMM转换为13131313

谁能告诉我这是否有可能。

谢谢,

McNets的评论似乎是一个很好的方法。

如果可以确定,您有

  • 纯ASCII字符
  • 不超过4个字母

您可以将字符串转换为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM