【问题标题】:I am not able to find age by using year in SQL Server 2005?我无法在 SQL Server 2005 中使用年份来查找年龄?
【发布时间】:2013-06-17 12:34:48
【问题描述】:

我正在编写如下查询

SELECT DATEDIFF(year,Clmn_Dob,getdate()) AS DiffDate 
FROM tblABCD

其中Clmn_DobNVARCHAR 列。我想根据出生日期找到年龄。但不是这个,我得到一个错误

将表达式转换为数据类型日期时间的算术溢出错误

我的字符串格式是dd/MM/yyyygetdate() 格式是MM/dd/yyyy

我没有得到任何解决方案

【问题讨论】:

  • Bad habits to kick : mis-handling date / range queries - 你应该将日期存储为字符串 - 你只是在自找麻烦。使用DATETIME 数据类型!这样您就可以在列上使用日期函数。
  • 我实际上使用的是日期时间数据类型。但在这种情况下,我想要这样。

标签: sql-server-2005 datetime datediff nvarchar


【解决方案1】:

您可以使用 CONVERT 功能:

SELECT
DATEDIFF(year,CONVERT(datetime, Clmn_Dob, 103),getdate()),
FROM tblABCD

这里是文档: http://msdn.microsoft.com/en-us/library/ms187928.aspx

【讨论】:

  • 那么也许您在该列中的数据已损坏?你确定那里只有 dd/MM/yyyy 字符串吗?
  • 好的。所以也许有一些不存在的日期,例如2013 年 1 月 33 日还是 2013 年 6 月 17 日?你有多少条目?你能检查每一个的正确日期吗?
  • 有5000个条目....,你能根据'/'把这个字符串列分成三列吗
  • 我不确定这是否是您的想法,但您可以使用:SELECT MAX(x.DD), MAX(x.MM), MAX(x.YYYY) FROM ( SELECT substring(Clmn_Dob, 1 ,2) as "DD", substring(Clmn_Dob, 4 ,2) as "MM", substring(Clmn_Dob, 7 ,4) as "YYYY" FROM tblABCD ) x
猜你喜欢
  • 2019-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-12
  • 1970-01-01
相关资源
最近更新 更多