SQL 服务器计算列 - 字母字符的主键
SQL Server Computed Column - primary key to alpha characters
我需要创建主键的 alpha 表示,然后将其存储在数据库 table 中。
我找到了一个很棒的 PHP 脚本,它完全符合我的要求。但是,我不确定直接在 SQL 服务器中实现它的最佳方法。
我认为我应该使用持久计算列..?但是,我不确定如何将 PHP 函数转换为在 SQL 服务器中工作的函数。任何 assistance/education 将不胜感激。
PHP代码:
function alphaID($n)
{
for ($r = ""; $n >= 0; $n = intval($n / 26) - 1) {
$r = chr($n%26 + 0x41) . $r;
}
return str_pad($r, 6, 'A', STR_PAD_LEFT);
}
echo alphaID(0) . "<br>"; // returns "AAAAAA"
echo alphaID(1) . "<br>"; // returns "AAAAAB"
你考虑过convert()
吗?
alter table t as pk_string as (convert(varchar(255), pk_column));
这将添加一个名为 pk_string
的新计算列,它是 pk_column
的字符串表示形式。
您可以为此添加一个用户定义函数
create /*or alter*/ function fnIntToPaddedBase26(@i int)
returns varchar(7)
as
begin
declare @out varchar(7) = '';
if @i = 0
set @out = 'A';
else
set @i += 1;
while @i > 0
select @i -= 1, @out = char(ascii('A') + @i%26) + @out, @i/=26;
if len(@out)<6
set @out = right(replicate('A',6)+@out,6);
return @out;
end;
GO
然后使用UDF
select dbo.fnIntToPaddedBase26(167854565) as int2char;
returns:
NCHENV
我需要创建主键的 alpha 表示,然后将其存储在数据库 table 中。
我找到了一个很棒的 PHP 脚本,它完全符合我的要求。但是,我不确定直接在 SQL 服务器中实现它的最佳方法。
我认为我应该使用持久计算列..?但是,我不确定如何将 PHP 函数转换为在 SQL 服务器中工作的函数。任何 assistance/education 将不胜感激。
PHP代码:
function alphaID($n)
{
for ($r = ""; $n >= 0; $n = intval($n / 26) - 1) {
$r = chr($n%26 + 0x41) . $r;
}
return str_pad($r, 6, 'A', STR_PAD_LEFT);
}
echo alphaID(0) . "<br>"; // returns "AAAAAA"
echo alphaID(1) . "<br>"; // returns "AAAAAB"
你考虑过convert()
吗?
alter table t as pk_string as (convert(varchar(255), pk_column));
这将添加一个名为 pk_string
的新计算列,它是 pk_column
的字符串表示形式。
您可以为此添加一个用户定义函数
create /*or alter*/ function fnIntToPaddedBase26(@i int)
returns varchar(7)
as
begin
declare @out varchar(7) = '';
if @i = 0
set @out = 'A';
else
set @i += 1;
while @i > 0
select @i -= 1, @out = char(ascii('A') + @i%26) + @out, @i/=26;
if len(@out)<6
set @out = right(replicate('A',6)+@out,6);
return @out;
end;
GO
然后使用UDF
select dbo.fnIntToPaddedBase26(167854565) as int2char;
returns:
NCHENV