I have the following condition:
WHERE sv_users.userDataNascimento LIKE '%95%';
And this condition looks for a date (
11/12/1995 ), of type
VARCHAR and not
Timestamp , a year ending with the numerals
95 . This numeral is the result of a calculation that I do in my code to find the year of birth of the user searched in the filter in a form.
I arrive at the year through this calculation:
AgeTyped – Current Year = YearOfBirth
That's why I set up the query. So far so good.
But, if I want to search in this field for a date that is less than, or greater than the numeral obtained in the calculation, for example, dates (
VARCHAR ) that end with the last two numerals less than the result of the calculation (which in this case is
95 ), how do I do? What do I use?
Try using a 4 digit date
First, try storing the date in a date field (
DATE ). Then it would be better to calculate years with 4 digits to avoid confusion with people of old or young age.
This is because people over 100 or under 15 (considering the year 2014 as a base) would not appear correctly in the greater or lesser filter.
For example, if someone was born after 2000 and you only use the last two digits, the comparison
anoNascimento < 0 would not return any date.
The same is true for older people. For example, if someone was born in * 1990 , a comparison by
anoNascimento < 90 would not include years 2000 onwards.
This could be partially circumvented with some additional logic, considering a base year and assuming none of the birth dates will be very old. However, run away from these gimmicks.
Anyway, using 4-digit years the query would be simpler and we could use the
YEAR function as in the example below:
WHERE YEAR(sv_users.userDataNascimento) > 1995;
And in this other one:
WHERE YEAR(sv_users.userDataNascimento) < 1995;
Double-digit comparison solution
WHERE CONVERT(RIGHT(sv_users.userDataNascimento, 2), SIGNED) > 95;
WHERE CONVERT(RIGHT(sv_users.userDataNascimento, 2), SIGNED) < 95;
Example in sqlfiddle .