
Martin Suarez
Pregunta**YEAR(now()) - YEAR(birthdate)**
- Listar a todos los clientes
- Obtener su fecha de cumpleaños
- Entregar el mensaje "Ya cumplió años este año" cuando el día o mes de el año en que se haga la consulta sean números mayores a los del cumpleaños del cliente
- Entregar el mensaje "No ha cumplido años este año" cuando el día o mes de el año en que se haga la consulta sean números menores a los del cumpleaños del cliente
- Entregar el mensaje "¡Feliz cumpleaños!" cuando el día y/o mes de el año en que se haga la consulta sean números iguales a los del cumpleaños del cliente

Ariana Gabriela Carvajal Kerch
Hola

Juan Castro
Qué bueno que te ayudó. :)
Recuerda que también puedes estudiar Postgres. En mi opinión y la de muchas otras personas, es la mejor base de datos relacional. Es súmamente poderosa.
Si te sorprendiste de poder usar condicionales en MySQL, no te imaginas lo que puedes hacer directo con Postgres. :wink:
:nerd_face: https://platzi.com/clases/postgresql/ :heart_eyes: https://platzi.com/blog/mi-historia-de-amor-con-postgresql/ :sunglasses: https://platzi.com/blog/el-apagon-de-platzi-migramos-de-mysql-a-postgresql/

David De la Cruz
¡Muchísimas Gracias @juandc!
Eres un biblioteca andante!, jeje, cuantas cositas nuevas que aprender. Me encanta!
Se me sigue haciendo la boca agua con cada curso que quiero aprender de platzi, pero poco a poco, que si no, no se centra uno en nada, así que tengo para años de aprendizaje.
Un abrazo.

Juan Castro
¡Hola, @japote!
El condicional que usa @luiscampos solo es un ejemplo rápido-genial del case
day
month
Para resolverlo hay que tener muy claro el objetivo. Los requisitos de esta consulta son:
Para esto, creo que lo mejor es un condicional CASE WHEN
SELECT `name`, `birthday`, CASE birthday WHEN ( month(now()) > month(birthdate) OR day(now()) > day(birthdate) ) THEN 'Ya cumplió años este año' WHEN( month(now()) < month(birthdate) OR day(now()) < day(birthdate) ) THEN 'No ha cumplido años este año' WHEN ( month(now()) = month(birthdate) AND day(now()) = day(birthdate) ) THEN '¡Feliz cumpleaños!' ELSE 'Error. Esto no tiene sentido. Llamen a Batman.' END AS cumplestatus FROM `clients`;
Aquí puedes estudiar más sobre el "case when múltiple": https://www.plus2net.com/sql_tutorial/sql_case.php. :wink:

David De la Cruz
@luiscampos estaba revisando las sentencias que has escrito, porque no sabía que se podían realizar comparaciones tipo if else en mysql, y me ha gustado aprenderlo, pero he visto que la comparación no es del todo buena, ya que únicamente muestra que ya cumplió años cuando el mes actual es mayor o igual al mes del cumpleaños y el día actual es mayor al día del cumpleaños, por lo que deja fuera muchos días y el mes actual, debido a que AND devolverá true cuando ambos lados de la comparación sea true.
He probado a realizar la comparación de diferentes formas, pero no doy con la sentencia correcta. @juandc ¿puedes ayudarnos? no creo que sea un problema de las funciones month() o day() ya que veo que funcionan correctamente, y tampoco creo que se solucione con un where, ya que eso lo única que me hace es filtrar el resultado de las tuplas a mostrar, creo que más bien debe ser un problema a la hora de la comparación, ya que debe de tomar en todo su conjunto tanto el mes como el día, y no por separado.

Jose Luis Campos Bautista
Se podría utilizar las funciones mont() y day() para compararlas.
Para saber quien ya cumplió años, se me ocurre el siguiente querie donde se complementa con la clausula case:
select name, birthdate, case when month(now()) >= month(birthdate) and day(now()) > day(birthdate) then 'Ya cunplio años' else 'No ha cunpliodo años' end as 'Estus cumple años' from clients;