从给定的列中获取客户的月龄(SQL Server 2017)

时间:2018-08-08 22:52:30

标签: sql-server

我是SQL的新手,只是想知道我是否有一行包含几个客户的生日,所以我必须创建一个新列,同时创建一个视图,其中包含customer_id和客户年龄(截至今天)(每月)(Age_in_months =当前日期-客​​户的出生日期)。我该怎么做 ?

我尝试使用date diff,有人建议使用floor和cast,但是我总是出错

其中之一

  

第245级状态1状态1行
  将varchar值'01 -05-1974'转换为数据类型int时转换失败。

有人可以提出一个非常简单的解决方案吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

由于您未提供表名或列名,因此我将假设表为客户,列为id和dob。

下面是一些获取信息的示例SQL

select 
    id as [Customer ID],
    dob as [Date Of Birth], 
    datediff(month, cast(dob AS DATE), getdate()) as [Age In Months]  
from 
    customers

首先,我们将获取出生日期,并确保它是一个日期,而不是Varchar或int,然后将其包装在DATEDIFF中,以获取dob列中的日期与月中的当前日期之间的差额

这是输出

Customer ID Date Of Birth     Age In Months
----------- ----------------- ------------- 
1           01-01-1991          331 
2           01-01-2018          7

答案 1 :(得分:0)

谢谢,我看到您的查询工作正常,手动插入了数据。我导入了CSV文件,因此这在sql中创建了字符串类型条目。您的查询给了我同样的错误,我只需要用convert

来修复它。
select customer_Id ,
DOB, DATEDIFF(month, CONVERT(date, Customer.DOB, 103), GETDATE()) as 
[Age In Months] from Customer;