我需要创建一个主键的字母表示形式,然后将其存储在db表中。
我发现了一个很棒的PHP脚本,它完全可以实现我想要的功能。但是,我不确定在SQL Server中直接实现它的最佳方法。
我认为我应该使用一个持久的计算列。但是,我不确定如何将PHP函数转换为可在SQL Server中使用的函数。任何帮助/教育将不胜感激。
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"
答案 0 :(得分:1)
您是否考虑过convert()
?
alter table t as pk_string as (convert(varchar(255), pk_column));
这将添加一个名为pk_string
的新计算列,它是pk_column
的字符串表示形式。
答案 1 :(得分:0)
您可以为此添加一个用户定义的功能
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;
返回:
NCHENV