Go
-- Create a function (the function is from csdn, which is unknown to the author)
Create Function [DBO]. [get_birthday]
(
@ Idcardno nvarchar (50)
)
Returns varchar (10)
As
Begin
Declare @ birthday datetime
If (LEN (@ idcardno) = 15 or Len (@ idcardno) = 16) and substring (@ idcardno, 9, 2) between 1 and 12 and substring (@ idcardno, 11, 2) between 1 and 31
Set @ Birthday = convert (varchar (10), '19' + substring (@ idcardno, 7,2) + '-' + substring (@ idcardno, 9, 2) + '-' + substring (@ idcardno, 120)
Else if Len (@ idcardno) = 18 and substring (@ idcardno,)> = 19 and substring (@ idcardno,) between 1 and 12 and substring (@ idcardno) between 1 and 31
Set @ Birthday = convert (varchar (10), substring (@ idcardno,) + '-' + substring (@ idcardno,) + '-' + substring (@ idcardno, 120)
Else
Set @ Birthday = NULL
Return (convert (varchar (10), @ birthday, 120 ))
End
-- Test example
Select DBO. [get_birthday] ('20140901 ')
-- Running result
/*
1983-06-04
*/