 <p>Refer to this <a href="http://stackoverflow.com/questions/5980783/sql-between-clause-with-strings-columns">SO Discussion</a> which details the reasons for a problem similar to yours.</p> <p><code>BETWEEN 'a' and 'b'</code> actually matches to <code>columnValue &gt;='a' and columnValue &lt;= 'b'</code></p> <p>In your case <strong>w52</strong> is greater than <strong>w5</strong> due to lexicographic ordering of Strings - this means that the <code>BETWEEN</code> clause will never return a true (think about it as equivalent to saying <code>BETWEEN 10 and 1</code> instead of <code>BETWEEN 1 and 10</code>.</p> <p>Edit to my response:</p> <p>Refrain from storing the week value as a string. Instead here are a couple of approaches in order of their preference:</p> <ol> <li>Have a timestamp column. You can easily then use MySQL query facilities to extract the week information out of this. For a reference see <a href="http://stackoverflow.com/questions/6710342/mysql-grouping-by-week">this</a> post.</li> <li>Maintain two columns - <code>YEAR, WEEKNO</code> where <code>YEAR</code> will store values like <strong>2015, 2016</strong> etc and <code>WEEKNO</code> will store the week number. This way you can query data for any week in any year.</li> </ol>