虽然表中没有这样的列具有该列

时间:2015-12-07 20:03:48

标签: sqlite

这是我的表:

/* 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社区的专家。

1 个答案:

答案 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

无论如何,里卡多先生的评论帮助我找到了解决这类问题的方法。