 <p><code>DatePart</code> can accept dates which are actually text instead of Date/Time datatype. However, the text must be something which Access recognizes as a valid date representation. A text date in <em>"yyyymmdd"</em> format doesn't satisfy that requirement. For example, in the Immediate window ...</p> <pre class="lang-vb prettyprint-override"><code>? IsDate("20141009") False </code></pre> <p>However, if you insert dashes between the year, month, and day segments, Access can recognize the text string as a date.</p> <pre class="lang-vb prettyprint-override"><code>? Format("20141009", "0000-00-00") 2014-10-09 ? IsDate(Format("20141009", "0000-00-00")) True </code></pre> <p>Test that technique in a simple query to make sure it avoids the error.</p> <pre class="lang-sql prettyprint-override"><code>SELECT RTG.[Sent Date], RTG.[Accept Date], DateDiff( 'd', Format([Accept Date],'0000-00-00'), Format([Sent Date],'0000-00-00') ) AS Expr1 FROM RTG </code></pre> <p>If Access still throws an error, use <code>CDate</code> to cast the text date to Date/Time datatype.</p> <pre class="lang-sql prettyprint-override"><code> DateDiff( 'd', CDate(Format([Accept Date],'0000-00-00')), CDate(Format([Sent Date],'0000-00-00')) ) AS Expr1 </code></pre> <p>Your task would be less challenging with actual Date/Time fields. You could create new Date/Time fields and execute an <code>UPDATE</code> query to load the transformed values from the old text date fields.</p>