Sql server 从给定列中获取客户年龄(以月为单位)(SQL Server 2017)

Sql server 从给定列中获取客户年龄(以月为单位)(SQL Server 2017),sql-server,Sql Server,我是SQL新手,只是想知道我是否有一行包含少数客户的出生日期,并且我必须创建一个新列,同时创建一个视图,该视图的客户id和客户年龄(以月为单位)为todayAge_in_months=当前日期-客户的出生日期。我该怎么做 我试过date diff,有人建议使用floor和cast,但我不断出错 其中一个 Msg 245,16级,状态1,第1行 将varchar值“01-05-1974”转换为数据类型int时,转换失败 有人能提出一个非常简单的解决方案吗 谢谢大家! 因为您没有提供表名或列名,所以

我是SQL新手,只是想知道我是否有一行包含少数客户的出生日期,并且我必须创建一个新列,同时创建一个视图,该视图的客户id和客户年龄(以月为单位)为todayAge_in_months=当前日期-客户的出生日期。我该怎么做

我试过date diff,有人建议使用floor和cast,但我不断出错

其中一个

Msg 245,16级,状态1,第1行 将varchar值“01-05-1974”转换为数据类型int时,转换失败

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


谢谢大家!

因为您没有提供表名或列名,所以我假设表是Customers,列是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
谢谢你,因为我看到你的查询很好,数据是手动插入的。我导入了CSV文件,因此在sql中创建了一个字符串类型的条目。你的查询给了我同样的错误,我只是需要用convert修复它

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

你不能使用SQL函数DATEDIFF吗?你读过DATEDIFF的文档了吗???读取文档和调试错误是程序员工作的一部分。能否运行:选择DatediffMM、getdate、getdate+1000转换varchar值“01-05-1974”时失败为什么将日期存储为字符串@bruceg-抱歉,我尝试使用date diff,当从字符串转换日期和/或时间时,我得到了Msg 241,级别16,状态1,第12行转换失败。Hello@CloudTheWolf-我尝试运行此命令,如您所述,选择customer_Id为[Cust_Id],DOB为[date Of Birth],DATEDIFFmonth,castDOB为date,GETDATE为[月龄]从客户处;我收到消息msg 241,级别16,状态1,第12行从字符串转换日期和/或时间时失败。感谢您,因为我看到您的查询工作正常,数据是手动插入的。我导入了CSV文件,因此在sql中创建了一个字符串类型条目。您的查询给了我相同的错误,我刚刚用con修复了它vert从customer中选择customer_Id、DOB、DATEDIFFmonth、CONVERTdate、customer.DOB、103、GETDATE作为[月龄];