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

在SQL中创建一个设置ID格式的函数,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我想介绍一些关于如何制作一个将ID格式化为YYDDMM-XXXX格式的函数的技巧 并以YYYYMMDDxxx格式返回相同的ID。示例和ID可以是850101-1122,作为函数中的inparameter,但我想返回为198501011122,而不必硬编码“19”+。因为在未来,有些人可能出生在2000年以上 谢谢 根据您的评论,假设您有一个计算年龄的函数,并且假设长度和格式始终相同,您可以使用它来确定一年中的前两个字符: case when age > year(getdate())-20

我想介绍一些关于如何制作一个将ID格式化为YYDDMM-XXXX格式的函数的技巧

并以YYYYMMDDxxx格式返回相同的ID。示例和ID可以是850101-1122,作为函数中的inparameter,但我想返回为198501011122,而不必硬编码“19”+。因为在未来,有些人可能出生在2000年以上


谢谢

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

case when age > year(getdate())-2000 
                then '19' 
                else '20' end
因此,如果年龄大于当前年份2000年(本例中为14岁),则您需要19XX,否则为20XX

接下来,您可以使用交换周围的
DD
MM
部分,并建立最终值

创建脚本 使用格式选择 样本输出
你怎么知道某人是1913年出生还是2013年出生?您想在哪里设置限制?实际上不必使用硬编码。应该是可能的,限制是一个人必须至少18岁。我们不能仅凭这一点来判断,对吗?如果您想将其设置为20XX而不是19XX,那么如果此人>100岁,该怎么办?以防万一:)是的,这也是正确的,但在这种情况下,我已经有了一个计算一个人年龄的函数。所以在这种情况下,我们可以做,如果函数_Age>100,然后是'19'。但这也是硬编码的。你基本上有两个选择:1)如果YY的话,将世纪视为“19xx”
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 |