none
sql server 截取 身份证 证的出生年月 计算年龄 问题: RRS feed

  • 问题

  • 用  sql  server   截取 身份证 证的出生年月  计算年龄 :一直有问题:
    比如:身份证号是:410305196601071522: 从数据库提取:19660107   然后与Getdate()比较:得出年龄,但sql 语句一直不对:
    希望大家帮忙;,,,,,感谢了“
    小吴
    2009年7月16日 5:41

答案

  • SELECT DATEDIFF([day], CAST(SUBSTRING(CardID, 7, 4) + '-' + SUBSTRING(CardID, 11, 2) + '-' + SUBSTRING(CardID, 13, 2) AS Datetime), GETDATE()) FROM authors
    【孟子E章】
    2009年7月16日 12:37
    版主
  • 建议先建立一个函数,通过函数完成计算

    CREATE FUNCTION GetYearsFromPID
    (
     @PID varchar(18)
    )
    RETURNS int
    AS
    BEGIN
     DECLARE @Years int;

     BEGIN TRY
      IF LEN(LTRIM(RTRIM(@PID))) = 18
       SELECT @Years = DATEDIFF(YEAR,CAST(SUBSTRING(@PID, 7, 8) AS DATETIME),GETDATE());
      ELSE IF LEN(LTRIM(RTRIM(@PID))) = 15
       SELECT @Years = DATEDIFF(YEAR,CAST(SUBSTRING(@PID, 7, 6) AS DATETIME),GETDATE());
      ELSE
       SELECT @Years = -1;
     END TRY
     BEGIN CATCH
      SELECT @Years = -1;
     END CATCH;

     RETURN @Years;
    END

    例子:

    SELECT [CardID],dbo.GetYearsFromPID([CardID]) AS [YEAR]
      FROM [authors]

    2009年7月17日 0:51

全部回复

  • SELECT DATEDIFF([day], CAST(SUBSTRING(CardID, 7, 4) + '-' + SUBSTRING(CardID, 11, 2) + '-' + SUBSTRING(CardID, 13, 2) AS Datetime), GETDATE()) FROM authors
    【孟子E章】
    2009年7月16日 12:37
    版主
  • 当然。15位的身份证号码和18位的做法应当有所区别
    【孟子E章】
    2009年7月16日 12:38
    版主
  • 建议先建立一个函数,通过函数完成计算

    CREATE FUNCTION GetYearsFromPID
    (
     @PID varchar(18)
    )
    RETURNS int
    AS
    BEGIN
     DECLARE @Years int;

     BEGIN TRY
      IF LEN(LTRIM(RTRIM(@PID))) = 18
       SELECT @Years = DATEDIFF(YEAR,CAST(SUBSTRING(@PID, 7, 8) AS DATETIME),GETDATE());
      ELSE IF LEN(LTRIM(RTRIM(@PID))) = 15
       SELECT @Years = DATEDIFF(YEAR,CAST(SUBSTRING(@PID, 7, 6) AS DATETIME),GETDATE());
      ELSE
       SELECT @Years = -1;
     END TRY
     BEGIN CATCH
      SELECT @Years = -1;
     END CATCH;

     RETURN @Years;
    END

    例子:

    SELECT [CardID],dbo.GetYearsFromPID([CardID]) AS [YEAR]
      FROM [authors]

    2009年7月17日 0:51