执行查询时未返回年龄

时间:2015-12-09 08:37:15

标签: sql sql-server asp-classic

当我运行以下代码时,这可能是什么问题,因为它没有返回年龄?

<% ' calculate age of employee
    bsql  = "select DATEDIFF(yyyy,DateOfBirth,GETDATE())  from employees "
    set brs = Server.CreateObject("ADODB.Recordset")
    brs.open bsql, dbconn, 1,2%>
<%=rs("DateOfBirth") %>

1 个答案:

答案 0 :(得分:-1)

由于@ar34z在评论中有pointed out;

  

“您没有选择该列,但正在创建新列”

将任何计算添加到表格中的字段后,您将创建所谓的“计算列”“表达式”,指定{{1}因为命名字段不起作用,因为ADO不知道列DateOfBirth只是一个未命名的计算列。

理想情况下,您希望使用别名来使计算列更容易识别

DateOfBirth

SELECT DATEDIFF(yyyy, DateOfBirth, GETDATE()) [DateOfBirth]
FROM employees

使用SQL Server都可以正常工作,并且使用任何一种变体都没有遇到任何问题。

当计算列返回年龄(不是出生日期)时,您可以为列SELECT DATEDIFF(yyyy, DateOfBirth, GETDATE()) AS [DateOfBirth] FROM employees 添加别名,然后使用[Age]从{{{}输出它1}}。

旁注:由于@damien-the-unbeliever在评论中有mentioned,您的年龄计算在这一点上并不十分准确,StackOverFlow上还有另外一个问题一些有趣的答案(只是不接受接受的答案作为福音)

因为它是(这只是我个人的观点)这个答案(https://stackoverflow.com/a/1572938/692942)是最好的。

为了完整起见,您还可以指示<%= rs("Age") %>按顺序位置返回字段,而不是通过在这种情况下传递基于0的字段位置索引来命名

ADODB.Recordset

可以工作并返回ADODB.Recordset中的第一个字段。

考虑到所有这些,我建议的解决方案(针对当前问题)将是;

<%= rs(0) %>

您会注意到我已替换SELECT ADODB DLL常量中的数值,以了解如何使用这些值我建议您阅读Using METADATA to Import DLL Constants