我正在構建處理大部分數據的Web應用程序的後端,前端開發人員正在尋找穩定的整數代碼以用於連接數據。將字母轉換爲數字
他們試圖使用的當前整數值是代理鍵,它將會改變將會導致許多問題。 每個表都有一個字母數字代碼,我正在尋找一種方法可以將其轉換爲穩定的int。
EG轉換代碼「AAAA」到1111或MMMM到13131313
誰能告訴我,如果這是在所有可能的。
感謝,
我正在構建處理大部分數據的Web應用程序的後端,前端開發人員正在尋找穩定的整數代碼以用於連接數據。將字母轉換爲數字
他們試圖使用的當前整數值是代理鍵,它將會改變將會導致許多問題。 每個表都有一個字母數字代碼,我正在尋找一種方法可以將其轉換爲穩定的int。
EG轉換代碼「AAAA」到1111或MMMM到13131313
誰能告訴我,如果這是在所有可能的。
感謝,
由於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
這意味着你和我不必擔心更新現有列
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;
,你如何期望將'ACAC' - > 1313與'MM' - > 1313區分開來? –
在臨時表中選擇獨立代碼,爲每個代碼分配一個int值,更新第一個表 – McNets
這些代碼的最大寬度是多少? – Shnugo