Click here to Skip to main content
16,015,531 members
Please Sign up or sign in to vote.
3.00/5 (2 votes)
See more:
SQL
mysql> use sginfo;
Database changed
mysql> describe personinfo;
+------------------------+--------------+------+-----+---------+-------+
| Field                  | Type         | Null | Key | Default | Extra |
+------------------------+--------------+------+-----+---------+-------+
| surname                | varchar(255) | YES  |     | NULL    |       |
| firstname              | varchar(255) | YES  |     | NULL    |       |
| middlename             | varchar(255) | YES  |     | NULL    |       |
| present_currentaddress | varchar(255) | YES  |     | NULL    |       |
| provincialaddress      | varchar(255) | YES  |     | NULL    |       |
| noofchildren           | varchar(255) | YES  |     | NULL    |       |
| height                 | varchar(255) | YES  |     | NULL    |       |
| weight                 | varchar(255) | YES  |     | NULL    |       |
| birthdate              | varchar(255) | YES  |     | NULL    |       |
| age                    | varchar(255) | YES  |     | NULL    |       |
| birthplace             | varchar(255) | YES  |     | NULL    |       |
| gender                 | varchar(255) | YES  |     | NULL    |       |
| civilstatus            | varchar(255) | YES  |     | NULL    |       |
| educationalattain      | varchar(255) | YES  |     | NULL    |       |
| schoolname             | varchar(255) | YES  |     | NULL    |       |
| course                 | varchar(255) | YES  |     | NULL    |       |
| yearsofstudy           | varchar(255) | YES  |     | NULL    |       |
| collegestatus          | varchar(255) | YES  |     | NULL    |       |
| trainingschoolname     | varchar(255) | YES  |     | NULL    |       |
| positiontrained        | varchar(255) | YES  |     | NULL    |       |
| yearstrained           | varchar(255) | YES  |     | NULL    |       |
| coursetrained          | varchar(255) | YES  |     | NULL    |       |
| detachment             | varchar(255) | YES  |     | NULL    |       |
| region                 | varchar(255) | YES  |     | NULL    |       |
| effdate                | varchar(255) | YES  |     | NULL    |       |
| workstatus             | varchar(255) | YES  |     | NULL    |       |
| empnumber              | varchar(255) | YES  |     | NULL    |       |
| positionemployed       | varchar(255) | YES  |     | NULL    |       |
| yearsofemployed        | varchar(255) | YES  |     | NULL    |       |
| sssnumber              | varchar(255) | YES  |     | NULL    |       |
| tinnumber              | varchar(255) | YES  |     | NULL    |       |
| nbi                    | varchar(255) | YES  |     | NULL    |       |
| nbidate                | varchar(255) | YES  |     | NULL    |       |
| pnp                    | varchar(255) | YES  |     | NULL    |       |
| pnpdate                | varchar(255) | YES  |     | NULL    |       |
| priorexp               | varchar(255) | YES  |     | NULL    |       |
| gdexp                  | varchar(255) | YES  |     | NULL    |       |
| guardposition          | varchar(255) | YES  |     | NULL    |       |
| uniformdate            | varchar(255) | YES  |     | NULL    |       |
| millitary              | varchar(255) | YES  |     | NULL    |       |
| los                    | varchar(255) | YES  |     | NULL    |       |
| previousemp            | varchar(255) | YES  |     | NULL    |       |
| licno                  | varchar(255) | YES  |     | NULL    |       |
| licdate                | varchar(1)   | YES  |     | NULL    |       |
| licexp                 | varchar(255) | YES  |     | NULL    |       |
| dateofemp              | varchar(255) | YES  |     | NULL    |       |
| badgeno                | varchar(255) | YES  |     | NULL    |       |
| neurocenter            | varchar(255) | YES  |     | NULL    |       |
| neuroresult            | varchar(255) | YES  |     | NULL    |       |
| neurodate              | varchar(255) | YES  |     | NULL    |       |
| drugcenter             | varchar(255) | YES  |     | NULL    |       |
| marijuana              | varchar(255) | YES  |     | NULL    |       |
| shabu                  | varchar(255) | YES  |     | NULL    |       |
| drugresult             | varchar(255) | YES  |     | NULL    |       |
| agency                 | varchar(255) | YES  |     | NULL    |       |
| histories              | text         | YES  |     | NULL    |       |
| agepattern             | varchar(255) | YES  |     | NULL    |       |
+------------------------+--------------+------+-----+---------+-------+
57 rows in set (0.01 sec)

mysql> select birthdate from personinfo limit 1;
+-----------+
| birthdate |
+-----------+
| 28-Apr-77 |
+-----------+
1 row in set (0.00 sec)

mysql> UPDATE personinfo SET age = DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(
birthdate)), '%Y')+0;
ERROR 1292 (22007): Truncated incorrect datetime value: '28-Apr-77'
mysql>


As you can see on my example above i have a table with a field birthdate and i show you an example data of it now my question is that my code for updating all the age when it meets its birthday seems wrong. can someone help me with this? TY :D
Posted

1 solution

First, the birthdate have to be converted to datetime type using str_to_date function in mysql to convert from varchar to datetime, see document here.

Secondly, there is really no need to store age in database as it is a moving number that is derivable and is best derived from birthdate in code.

Thirdly, better to change all the date fields, eg. birthdate, dateofemp etc, to datetime data type. You should be able to find examples on the web.
 
Share this answer
 
v2
Comments
[no name] 19-Dec-13 22:28pm    
Note especally Second of Peter Leow's answer. Why keep data twice? There is no reason!
Information::= is eliminate uncertainty. Keep "same" information twice is more contraproductive.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900