Sql server 2008 r2 如何根据rdlc中的“今日日期”和“出生日期”字段计算年、月或日的年龄?

Sql server 2008 r2 如何根据rdlc中的“今日日期”和“出生日期”字段计算年、月或日的年龄?,sql-server-2008-r2,Sql Server 2008 R2,我正在使用注册证书,它需要婴儿的年龄,可能是几年、几个月或几天。我使用了=DateDiff(“YYYY”,Fields!IssuedOnORNo.Value,Fields!CertificationDate.Value),但当我将其更改为月或日时,它只产生相同的年份。我想要的是它将计算孩子的年龄,无论是一个月大还是一天大。请尝试下面的t-sql代码,如果它有效: CREATE TABLE dbo.RegistrationCertificate (IssuedOnORNo DATETIME, Ce

我正在使用注册证书,它需要婴儿的年龄,可能是几年、几个月或几天。我使用了
=DateDiff(“YYYY”,Fields!IssuedOnORNo.Value,Fields!CertificationDate.Value)
,但当我将其更改为月或日时,它只产生相同的年份。我想要的是它将计算孩子的年龄,无论是一个月大还是一天大。

请尝试下面的t-sql代码,如果它有效:

CREATE TABLE dbo.RegistrationCertificate (IssuedOnORNo DATETIME, CertificationDate DATETIME)

INSERT dbo.RegistrationCertificate (IssuedOnORNo, CertificationDate)
SELECT GETDATE(), DATEADD(MONTH, 13, GETDATE())
UNION ALL
SELECT GETDATE(), GETDATE() + 1
UNION ALL
SELECT GETDATE() - 2, GETDATE()
UNION ALL
SELECT GETDATE(), DATEADD(YEAR, 3, GETDATE())
UNION ALL
SELECT GETDATE(), DATEADD(MONTH, 4, GETDATE())

SELECT t.*
    , YEARS = DATEDIFF(YEAR, t.IssuedOnORNo, t.CertificationDate)
    , MONTHS = (DATEDIFF(MONTH, t.IssuedOnORNo, t.CertificationDate) - ((DATEDIFF(MONTH, t.IssuedOnORNo, t.CertificationDate) / 12) * 12))
    , DAYS = ((DATEDIFF(DAY, t.IssuedOnORNo, t.CertificationDate) - ((DATEDIFF(DAY, t.IssuedOnORNo, t.CertificationDate) / 365) * 365))
        - (((DATEDIFF(MONTH, t.IssuedOnORNo, t.CertificationDate) - ((DATEDIFF(MONTH, t.IssuedOnORNo, t.CertificationDate) / 12) * 12))) * 30) - 1)
FROM dbo.RegistrationCertificate  t WITH(NOLOCK)
顺便说一句,罗杰,如果您想知道如何在报表中使用该代码,您可以使用上面的代码为报表数据创建一个存储过程

编辑:

在这种情况下,下面的代码应该是与您的报告代码足够接近的翻译:

YEARS = DateDiff("YYYY",Fields!IssuedOnORNo.Value, Fields!CertificationDate.Value)
MONTHS = (DateDiff("m", Fields!IssuedOnORNo.Value, Fields!CertificationDate.Value)
    - ((DateDiff("m", Fields!IssuedOnORNo.Value, Fields!CertificationDate.Value) / 12) * 12))
DAYS = ((DateDiff("dd", Fields!IssuedOnORNo.Value, Fields!CertificationDate.Value) - ((DateDiff("dd", Fields!IssuedOnORNo.Value, Fields!CertificationDate.Value) / 365) * 365))
        - (((DateDiff("m", Fields!IssuedOnORNo.Value, Fields!CertificationDate.Value) - ((DateDiff("m", Fields!IssuedOnORNo.Value, Fields!CertificationDate.Value) / 12) * 12))) * 30) - 1)

请尝试下面的t-sql代码(如果有效):

CREATE TABLE dbo.RegistrationCertificate (IssuedOnORNo DATETIME, CertificationDate DATETIME)

INSERT dbo.RegistrationCertificate (IssuedOnORNo, CertificationDate)
SELECT GETDATE(), DATEADD(MONTH, 13, GETDATE())
UNION ALL
SELECT GETDATE(), GETDATE() + 1
UNION ALL
SELECT GETDATE() - 2, GETDATE()
UNION ALL
SELECT GETDATE(), DATEADD(YEAR, 3, GETDATE())
UNION ALL
SELECT GETDATE(), DATEADD(MONTH, 4, GETDATE())

SELECT t.*
    , YEARS = DATEDIFF(YEAR, t.IssuedOnORNo, t.CertificationDate)
    , MONTHS = (DATEDIFF(MONTH, t.IssuedOnORNo, t.CertificationDate) - ((DATEDIFF(MONTH, t.IssuedOnORNo, t.CertificationDate) / 12) * 12))
    , DAYS = ((DATEDIFF(DAY, t.IssuedOnORNo, t.CertificationDate) - ((DATEDIFF(DAY, t.IssuedOnORNo, t.CertificationDate) / 365) * 365))
        - (((DATEDIFF(MONTH, t.IssuedOnORNo, t.CertificationDate) - ((DATEDIFF(MONTH, t.IssuedOnORNo, t.CertificationDate) / 12) * 12))) * 30) - 1)
FROM dbo.RegistrationCertificate  t WITH(NOLOCK)
顺便说一句,罗杰,如果您想知道如何在报表中使用该代码,您可以使用上面的代码为报表数据创建一个存储过程

编辑:

在这种情况下,下面的代码应该是与您的报告代码足够接近的翻译:

YEARS = DateDiff("YYYY",Fields!IssuedOnORNo.Value, Fields!CertificationDate.Value)
MONTHS = (DateDiff("m", Fields!IssuedOnORNo.Value, Fields!CertificationDate.Value)
    - ((DateDiff("m", Fields!IssuedOnORNo.Value, Fields!CertificationDate.Value) / 12) * 12))
DAYS = ((DateDiff("dd", Fields!IssuedOnORNo.Value, Fields!CertificationDate.Value) - ((DateDiff("dd", Fields!IssuedOnORNo.Value, Fields!CertificationDate.Value) / 365) * 365))
        - (((DateDiff("m", Fields!IssuedOnORNo.Value, Fields!CertificationDate.Value) - ((DateDiff("m", Fields!IssuedOnORNo.Value, Fields!CertificationDate.Value) / 12) * 12))) * 30) - 1)

您的函数语法不是Sql Serveredit:=DateDiff(“YYYY”,Fields!DateofBirth.Value,Fields!CertificationDate.Value),而不是上面的代码。对不起,复制的代码错误。是的,它不是sql server,而是RDLC报表中的vb代码。您的函数语法不是sql server编辑:=DateDiff(“yyy”,Fields!DateofBirth.Value,Fields!CertificationDate.Value)不是上面的代码。对不起,复制的代码错误。是的,它不是sql server,而是RDLC报表中的vb代码。谢谢,但我想我不能在RDLC代码属性中使用它。我想让rdlc计算两个日期,这两个日期可能是婴儿的几岁、几个月或几天。谢谢。在VisualStudio中,有什么方法可以在RDLC报告的code属性中实现它吗?我还使用此属性在证书的日日期中添加th、nd、rd和st,它可以正常工作。所以我相信计算年龄(以年、月、日为单位)也可以在这里完成。您是否尝试过将代码作为公式放在表格单元格中?谢谢,但我认为我不能在RDLC代码属性中使用它。我想让rdlc计算两个日期,这两个日期可能是婴儿的几岁、几个月或几天。谢谢。在VisualStudio中,有什么方法可以在RDLC报告的code属性中实现它吗?我还使用此属性在证书的日日期中添加th、nd、rd和st,它可以正常工作。所以我相信计算年龄(以年、月、日为单位)也可以在这里完成。你有没有试过把代码作为公式放在表格单元格中?