在SQL中创建一个格式化ID的函数

时间:2014-09-08 07:58:43

标签: sql sql-server sql-server-2008

我想提供一些有关如何制作以YYDDMM-XXXX格式格式化ID的功能的提示。

并以YYYYMMDDXXXX格式返回相同的ID。示例和ID可以是850101-1122作为函数中的参数,但我想返回198501011122而不必硬编码'19'+。因为将来某些系统人员可能会在2000年出生。

谢谢!

1 个答案:

答案 0 :(得分:0)

根据您的评论,假设您有一个计算年龄的函数并假设长度和格式始终相同,您可以使用它来确定一年中的前两个字符:

case when age > year(getdate())-2000 
                then '19' 
                else '20' end

因此,如果年龄大于当前年份 - 2000年(在这种情况下为14),则需要19XX,否则为20XX。

接下来,您可以使用substring来交换DDMM部分并构建最终值。

Demo SQL Fiddle

创建脚本

create table userid_table (id nvarchar(20), age int)
insert into userid_table (id, age)
values ('852801-1122', 29),
       ('132201-1233', 99),
       ('652001-1344', 49),
       ('751501-1455', 39),
       ('001501-1566', 14)

选择格式化

select id as original_id, age,
       case when age > year(getdate())-2000 then '19' else '20' end + 
            substring(id,1,2) + 
            substring(id,5,2) + 
            substring(id,3,2) + 
            substring(id,8,4)
from userid_table

样本输出

| ORIGINAL_ID | AGE | NEW_ID       |
|-------------|-----|--------------|
| 852801-1122 |  29 | 198501281122 |
| 132201-1233 |  99 | 191301221233 |
| 652001-1344 |  49 | 196501201344 |
| 751501-1455 |  39 | 197501151455 |
| 001501-1566 |  14 | 200001151566 |