SQL Server计算列-字母字符的主键

时间:2019-02-25 15:49:13

标签: php sql sql-server calculated-columns

我需要创建一个主键的字母表示形式,然后将其存储在db表中。

我发现了一个很棒的PHP脚本,它完全可以实现我想要的功能。但是,我不确定在SQL Server中直接实现它的最佳方法。

我认为我应该使用一个持久的计算列。但是,我不确定如何将PHP函数转换为可在SQL Server中使用的函数。任何帮助/教育将不胜感激。

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"

2 个答案:

答案 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