mysql> desc maintenance; +------------+--------------+------+-----+--------------------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+--------------+------+-----+--------------------+-------+ | indate | date | YES | | NULL | | | contract | char(25) | NO | MUL | NULL | | | cstatus | char(20) | YES | | NULL | | | customer | char(35) | YES | | NUCO INC | | | party | int(11) | YES | | NULL | | | city | varchar(125) | YES | | NULL | | | state | varchar(50) | YES | | NULL | | | country | varchar(50) | YES | | NULL | | | serial | char(25) | YES | | NULL | | | model | char(25) | YES | | NULL | | | mdesc | char(50) | YES | | NULL | | | service | char(50) | YES | | NULL | | | qty | int(11) | YES | | NULL | | | amc | int(11) | YES | | NULL | | | sdate | date | YES | | NULL | | | edate | date | YES | | NULL | | | cdate | date | YES | | NULL | | | days | int(11) | YES | | NULL | | | due | int(11) | YES | | NULL | | | comments | char(50) | YES | | NULL | | | lstatus | char(20) | YES | | Installed | | | b2customer | char(50) | YES | | NULL | | | descr | char(50) | YES | | NULL | | | amlp | int(11) | YES | | NULL | | | rcsdate | date | YES | | NULL | | | rcedate | date | YES | | NULL | | | contractid | int(11) | YES | | NULL | | | refresh | char(8) | YES | | NULL | | +------------+--------------+------+-----+--------------------+-------+ 28 rows in set (0.02 sec)
I cleaned up the insert statement to push the dates as strings: $dbh->do("insert into maintenance (indate, b2customer, contract, cstatus, customer, party, city, state, serial, model, mdesc, descr, qty, amlp, sdate, edate, rcsdate, rcedate, days, contractid) values (CURDATE(),\'$b2customer\', \'$contract\', \'$status\', \'$incustomer\', $party, \'$city\', \'$state\', \'$serial\', \'$model\', \'$mdesc\', \'$descr\', $qty, $amlp, \'$sdate\', \'$edate\', \'$rcsdate\', \'$rcedate\', $days, $contractid)"); Here are two rows from the spreadsheet: NUCO INC 61420644H ACTIVE NUCO RICHARDSON (TACSUN) 8200137 RICHARDSON TX APM00060300673 CX300-FD CX300 W 2GB FIELD INSTALL PREMIUM HARDWARE SUPPORT 1 $1,400.04 70.00% 01/27/06 01/26/09 01/27/09 09/30/10 $1,408.48 612 742892 NUCO INC 61420644H ACTIVE NUCO RICHARDSON (TACSUN) 8200137 RICHARDSON TX 0 CX-2G10-146 146GB 10K 2GB FC PREMIUM HARDWARE SUPPORT 15 $1,926.00 70.00% 01/27/06 01/26/09 01/27/09 09/30/10 $1,937.61 612 742892 Here is the print statement from the perl script: +++++++++++++++++++++++++++++++++++ Bill to Customer: NUCO INC Contract: 61420644H Status: ACTIVE Install Customer: NUCO RICHARDSON (TACSUN) Party ID: 8200137 City: RICHARDSON State: TX Serial Number: APM00060300673 Model: CX300-FD Model Description: CX300 W 2GB FIELD INSTALL Description: PREMIUM HARDWARE SUPPORT Quantity: 1 Annual List Price: 1400.04 Discount: 0.7 Start Date: 2006-1-28 End Date: 2009-1-27 Coverage Start Date: 2009-1-28 Coverage End Date: 2010-10-1 Pro-Rated Maintenance: 1408.47859726027 Days: 612 Contract ID: 742892 +++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++ Bill to Customer: NUCO INC Contract: 61420644H Status: ACTIVE Install Customer: NUCO RICHARDSON (TACSUN) Party ID: 8200137 City: RICHARDSON State: TX Serial Number: 0 Model: CX-2G10-146 Model Description: 146GB 10K 2GB FC Description: PREMIUM HARDWARE SUPPORT Quantity: 15 Maintenance List Price: 1926 Discount: 0.7 Start Date: 2006-1-28 End Date: 2009-1-27 Coverage Start Date: 2009-1-28 Coverage End Date: 2010-10-1 Pro-Rated Maintenance: 1937.60876712329 Days: 612 Contract ID: 742892 +++++++++++++++++++++++++++++++++++ Here is a select * for these two records: mysql> select * from maintenance where contract='61420644H'; +------------+-----------+---------+-----------------------------------+---- -----+------------+-------+---------+----------------+-------------+-------- -------------------+---------+------+------+------------+------------+------ -+------+------+----------+-----------+-------------------+----------------- ---------+------+------------+------------+------------+---------+ | indate | contract | cstatus | customer | party | city | state | country | serial | model | mdesc | service | qty | amc | sdate | edate | cdate | days | due | comments | lstatus | b2customer | descr | amlp | rcsdate | rcedate | contractid | refresh | +------------+-----------+---------+-----------------------------------+---- -----+------------+-------+---------+----------------+-------------+-------- -------------------+---------+------+------+------------+------------+------ -+------+------+----------+-----------+-------------------+----------------- ---------+------+------------+------------+------------+---------+ | 2009-07-14 | 61420644H | ACTIVE | NUCO RICHARDSON (TACSUN) | 8200137 | RICHARDSON | TX | NULL | APM00060300673 | CX300-FD | CX300 W 2GB FIELD INSTALL | NULL | 1 | NULL | 0000-00-00 | 0000-00-00 | NULL | 612 | NULL | NULL | Installed | NUCO INC | PREMIUM HARDWARE SUPPORT | 1400 | 0000-00-00 | 0000-00-00 | 742892 | NULL | | 2009-07-14 | 61420644H | ACTIVE | NUCO RICHARDSON (TACSUN) | 8200137 | RICHARDSON | TX | NULL | 0 | CX-2G10-146 | 146GB 10K 2GB FC | NULL | 15 | NULL | 0000-00-00 | 0000-00-00 | NULL | 612 | NULL | NULL | Installed | NUCO INC | PREMIUM HARDWARE SUPPORT | 1926 | 0000-00-00 | 0000-00-00 | 742892 | NULL | +------------+-----------+---------+-----------------------------------+---- -----+------------+-------+---------+----------------+-------------+-------- -------------------+---------+------+------+------------+------------+------ -+------+------+----------+-----------+-------------------+----------------- ---------+------+------------+------------+------------+---------+ 2 rows in set (0.00 sec) So as you can see my date inserts are returning ³0000-00-00². That¹s better than ³2040-07-14² but I still get those with some of the inserts. It also appears the Julian date is adding a day to the date although that doesn¹t materially impact my project. Thoughts? Hagen On 7/14/09 12:44 PM, "Michael Dykman" <mdyk...@gmail.com> wrote: > Hagan, > > your premise looks reasonable enough (excepting that your dates must > always be in quotes in your insert statement.. the system is expecting > a string).. might you show us your schema and perhaps a print-out of > your query after it has been rendered by perl? > > > - michael dykman > > On Tue, Jul 14, 2009 at 2:23 PM, Hagen Finley<finha...@comcast.net> wrote: >> I am using mysql Server version: 5.1.31 MySQL Community Server (GPL) on a >> MAC 10.5 host. I am having some strange date translation issues when I >> insert dates into my tables. >> >> What I do is run perl¹s Spreadsheet::ParseExcel module with Time::JulianDay >> to reformat excel dates to insert properly into mysql. >> >> use Spreadsheet::ParseExcel; >> use Time::JulianDay; >> >> To reformat the date I run a small code sequence: >> >> $sdate0 = $sdate + julian_day(1900, 1, 0); >> ($year, $month, $day) = inverse_julian_day($sdate0); >> $sdate1 = join '-', $year,$month,$day; >> >> This seems to work fine because I print my output to a file and the date >> format appears to be correct: >> >> +++++++++++++++++++++++++++++++++++ >> NUCO INC >> M61037841 >> ACTIVE >> 61037841 >> 2815041 >> RICHARDSON >> TX >> US >> APM00051703278 >> CX-ATA-DAE >> DAE ATA EXPANSION FOR CX >> PREMIUM HARDWARE SUPPORT >> 5 >> 5050.2 >> 2005-8-5 >> 2008-8-6 >> 201 >> +++++++++++++++++++++++++++++++++++ >> >> So my dates show up in the 2008-6-15 format. The problem is when I insert >> those dates into my table I either get all 0s or I get a 2040 year (with the >> correct month and day): >> >> NUCO INC | 2815487 | RESEARCH TRIANGLE PARK | NC | TN187401264 | 1 | >> DMX1000-P2 | DMX-2 U PERF SNGL BAY | 0000-00-00 | 2040-08-06 | 365 | 23275 >> | >> >> I have had this weird year issue pop up time to time but it was easy enough >> to work around it. However, for my current project I really need the dates >> in the table to match the dates in the source spreadsheet. >> >> I do see that the dates I am inputing are not in a pure YYYY-MM-DD format- >> missing 0s. Its possible that that is the issue but since the date is >> getting converted from the underlying Julian date I am not sure how to fix >> that. >> >> In case it matters, here is my insert string: >> >> $dbh->do("insert into maintenance >> (indate, b2customer, contract, cstatus, customer, party, city, state, >> serial, model, mdesc, descr, qty, amlp, sdate, edate, rcsdate, rcedate, >> days, contractid) >> values >> (CURDATE(),\'$b2customer\', \'$contract\', \'$status\', \'$incustomer\', >> $party, \'$city\', \'$state\', \'$serial\', \'$model\', \'$mdesc\', >> \'$descr\', $qty, $amlp, $sdate, $edate, $rcsdate, $rcedate, $days, >> $contractid)"); >> >> I have also tried inserting the data as a string but that doesn¹t seem to >> make any difference. >> >> Any help would be greatly appreciated. Thank you! >> >> Hagen Finley >> Boulder, CO >> >> >> > >