[OFF-TOPIC]
También puedes hacerlo con código SQL puro:
Ahora, la explicación. En el espacio del valor a insertar, evalúo una
condición. Si hay registros en la tabla (más de cero) y el año del último registro guardado es igual al año de la fecha actual, guardo el resultado de concatenar al año de la fecha actual con un guion y el valor que se encuentra a la derecha del guion del último registro guardado (ubicado en la posición 6 de dicho registro), al cual convierto a entero para sumarle uno. De esta manera, se convierte en el siguiente registro con respecto al último guardado, siempre dentro del mismo año. En el caso de que la condición no se cumpla, es decir, de que la tabla esté vacía o de que el año del último registro no coincida con el año actual (lo cual quiere decir que ya estamos en un nuevo año), guardo el resultado de concatenar al año de la fecha actual con un guion y el número 1. Para esta segunda parte, si fuera el primer caso, en el que la tabla estuviera vacía, se convertiría en el primer registro de la tabla, y si fuera el segundo caso, en el que nos encontramos en un nuevo año, se convertiría en el primer registro del año. De esta forma, quedan cubiertos todos los posibles casos.
La estructura de la condición es la siguiente:
Para este ejemplo utilicé las siguientes funciones:
COUNT()
: Devuelve la cantidad de registros en la tabla para el campo especificado. Si se le pasa un asterisco (*) como argumento, se tomará en cuenta a todos los campos. CONCAT()
: Permite concatenar valores. CURDATE()
: Devuelve la fecha actual. YEAR()
: Devuelve el año de la fecha pasada como parámetro. CONVERT()
: Devuelve el valor pasado como argumento convertido al tipo especificado como segundo parámetro. SUBSTRING()
: Toma una parte de una cadena, la cual se pasa como primer argumento, siendo el segundo la posición de la cadena desde la cual se tomará la porción. Puede haber un tercer argumento para definir la posición final de la porción. Las posiciones se empiezan a contar desde el 1.
Como el valor a guardar poseerá un guion, el campo ya no puede seguir siendo de tipo entero; debe ser de tipo cadena. Asigno diferentes alias a la tabla en las subconsultas para evitar conflictos con la sentencia principal. Si no lo haces así, se producirá el error #1093, el cual ocurre cuando se intenta consultar una tabla que está siendo modificada, como sucede en los casos de inserción, actualización y eliminación de datos.
Para mayores detalles, consulta el
manual.
Un saludo