Om man bara skall mata in och skriva ut datum, så fungerar det förstås att använda strängar för ändamålet. Om man däremot vill kunna söka efter poster med vissa datum, sortera poster kronologiskt och liknande, så är det nog effektivare om det inmatade datumet delas upp i sina beståndsdelar från början, och skall man klara osäkra och/eller okända uppgifter behövs en entydig representation av dessa.
Den datumrepresentation som finns i många systembibliotek är knappast användbar. Dels saknas möjlighet att ange okänt värde, dels brukar de ha problem med historiska årtal (före 1900, före gregorianska kalendern, före vår tideräknings början). Om det inte finns något standardbibliotek för detta (jag kan tänka mig att programutvecklare som arbetar inom de historiska vetenskaperna har funderat över problemet), så lär man få skriva rutinerna själv.
Alla rutiner för sökning och jämförelser bör klara poster där inte alla fält är ifyllda, antingen genom att ignorera dem eller genom att göra partiella jämförelser. Om jag söker efter personer födda 1809 så vill jag förstås hitta alla med detta födelseår vare sig deras exakta födelsedatum är känt eller ej. Samma sak gäller ju om jag söker efter ett sockennamn och hittar personer med en mer precis ortsangivelse. Om man ändå tänker skriva sådana sökrutiner, så kan man lika gärna göra dem användbara för såväl datum som orter och andra fält. Rena strängjämförelser är inte alltid idealiska.
Representationen av okända eller osäkra värden kan göras mer eller mindre avancerad. Tills för bara något decennium sedan förekom det att årtal lagrades med bara två siffror, och att årtalet 99 fick betyda när som helst i framtiden snarare än 1999! Enklast är förmodligen att ha särskilda meta-fält som anger huruvida exempelvis månaden är känd, snarare än att koda okänd månad med -1 eller 0. Det tar något mer plats, men man glömmer inte lika lätt att testa meta-fältet om det behövs för att rutinerna alls skall fungera.