
Tips.Net > WordTips Home > Printing > Mail Merge > Proper Comparisons for Dates in Merge Fields
Summary: When merging documents in Word, you can use merge fields to make comparisons on the data you are merging. Sometimes the comparisons may not give you exactly what you expect, and it can be confusing as to why this is. This tip describes how you can compare dates within a merge field to get the desired results. (This tip works with Microsoft Word 97, Word 2000, Word 2002, and Word 2003.)
Volker is having a problem comparing dates in a merge field. His database contains a Birthdate field, which (obviously) contains a birth date for each person in the database. As he merges each record, he wants to compare the Birthdate field to a reference date, and then take some action based on the result. The logic he is attempting to use looks like this:
{IF {MERGEFIELD Birthdate} > "10/4/1976" "Under 30" "Over 30"}
The problem is that the comparison doesn't work properly; it doesn't return consistent results. One possible solution is to use a format switch in the merge field, in the following manner:
{IF {MERGEFIELD Birthdate\@"MM/DD/YYYY"} > "10/04/1976" "Under 30" "Over 30"}
This puts the incoming information into a comparable format. The results you get from this approach may depend, however, on characteristics of the data source, independent of Word. You could also try putting the dates into a year-first format, such as the following:
{IF {MERGEFIELD Birthdate\@"YYYY/MM/DD"} > "2006/10/04" "Under 30" "Over 30"}
If the comparison still yields inconsistent results, then the only solution may be to do a mathematical conversion on the date (actually, on both Birthdate and the reference date) so that you have an actual numeric comparison. You can do this by converting the date into a Julian value, which requires a very complex merge field, like the one shown here:
{IF {QUOTE {SET a{=INT((14-{MERGEFIELD BIRTHDATE \@ M})/12)}}
{SET b{={MERGEFIELD BIRTHDATE \@ yyyy}+4800-a}}
{SET c{={MERGEFIELD BIRTHDATE \@ M}+12*a-3}}
{SET d{MERGEFIELD BIRTHDATE \@ d}}
{SET jd{=d+INT((153*c+2)/5)+365*b+INT(b/4)-INT(b/100)+INT(b/400)-32045}}
{jd \#,0}} > 2,443,056 "over 30" "under30"}
Such an approach may look intimidating, but is just the brute-force method necessary for some instances. If you want more details on how the conversion works (and why it may be necessary), check out the following file:
http://www.wopr.com/w3tfiles/10-249902-DateCalc.zip
When you uncompress this file, you end up with a Word document that includes the full, multi-page explanation concerning date conversions.
Tip #356 applies to Microsoft Word versions: 97 2000 2002 2003
Take Control! Master the real power behind Word! Successfully master the secrets of powerful formatting and create documents that stand out from the rest. Best of all, you can create documents that are easy to maintain and quick to change.
Check out WordTips: Sytles and Templates today!
Uncover how you can master the full potential of printing your documents. Everything you wanted to know about printing and printers, using Word. (more information...)
Ask a Word Question
Make a Comment
Beauty Tips
Bugs and Pests Tips
Car Tips
Cleaning Tips
College Tips
Cooking Tips
Excel2007 Tips
ExcelTips
Family Tips
Gardening Tips
Health Tips
Home Tips
Money Tips
Organizing Tips
Pet Tips
Word2007 Tips
WordTips