这是我的表:
/* Column information for - tblPersonalInfo */
----------------------------------------------
cid name type notnull dflt_value pk
------- --------------- ---------- ----------- -------------- ---
0 userID INTEGER 0 1
1 firstName TEXT 0 0
2 middleName TEXT 0 0
3 lastName TEXT 0 0
4 nameSuffix TEXT 0 0
5 birthday DATE 0 0
6 sex INTEGER 0 0
7 height_foot INTEGER 0 0
8 height_inch INTEGER 0 0
9 weight REAL 0 0
10 civilStatus INTEGER 0 0
11 contactNo TEXT 0 0
12 emailAddress TEXT 0 0
13 address_city TEXT 0 0
14 address_brgy TEXT 0 0
15 photo BLOB 0 0
我想执行此查询以获取tblPersonalInfo表中Employee的年龄:
SELECT CAST(STRFTIME('%Y.%m%d', 'NOW') - STRFTIME('%Y.%m%d', birthday) AS INT) AS Age
FROM tblPersonalInfo
我从SQLite: How to calculate age from birth date模拟了查询/公式,但SQLite给了我一条错误消息,上面写着:
错误:没有这样的专栏:生日
高级感谢StackOverflow社区的专家。
答案 0 :(得分:0)
发现问题是表格中存储的数据(生日列)。
我通过Delphi将其存储为 String 而不是 Date 数据类型,如下所示(请注意sqSavePersonalInfo中的参数数据类型):
{TSQLQuery.SQL.Text}
UPDATE tblPersonalInfo
SET
firstName = :prmFirstName,
middleName = :prmMiddlenName,
lastName = :prmLastName,
nameSuffix = :prmNameSuffix,
birthday = :prmBirthday,
sex = :prmSex,
height_foot = :prmFoot,
height_inch = :prmInch,
weight = :prmWeight,
civilStatus = :prmCivilStatus,
contactNo = :prmContactNo,
emailAddress = :prmEmailAddress,
address_city = :prmAddressCity,
address_brgy = :prmVillage
WHERE
userID = :prmUserID;
{Setting the parameters value, specifically the birthday parameter}
...
sqSavePersonalInfo.ParamByName('prmBirthday').AsString := FormatDateTime('YYYY/MM/DD', dtpDateOfBirth.Date);
...
我测试在生日字段中再次插入一些数据。这次,不是String数据类型。
http://sqlfiddle.com/#!7/2c09e/3
无论如何,里卡多先生的评论帮助我找到了解决这类问题的方法。