我想了解一些关于如何制作一个函数的技巧,该函数将ID格式化为YYDDMM-XXXX格式。
并以YYYYMMDXXXX的格式返回相同的ID。示例和ID可以是850101-1122作为函数中的参数,但我希望返回为198501011122,而不必硬编码"19"+。因为在未来的一些系统中,人可能出生在2000年以上。
谢谢!
根据您的评论,假设您有一个计算年龄的函数,并且假设长度和格式始终相同,您可以使用它来确定一年中的前两个字符:
case when age > year(getdate())-2000
then '19'
else '20' end
因此,如果年龄大于当前年份2000(在这种情况下为14),那么你想要19XX,否则就是20XX。
接下来,您可以使用子字符串来交换DD
和MM
部分,并构建最终值。
演示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 |