MySQL signed unix_timestamp per convertire date precedenti al 1-1-1970

su TYPO3 le date sono salvate come unix_timestamp, un numero intero positivo se successive al 1-1-1970, negativo se precendenti.

MySQL ha una funzione UNIX_TIMESTAMP che restituisce zero per le date precedenti al 1-1-1970, quindi è sufficiente dichiarare una funzione SIGNED_UNIX_TIMESTAMP e usarla:

[sql]
DELIMITER |
CREATE FUNCTION SIGNED_UNIX_TIMESTAMP (d DATETIME)
RETURNS BIGINT
DETERMINISTIC
BEGIN
DECLARE tz VARCHAR(100);
DECLARE ts BIGINT;
SET tz = @@time_zone;
SET time_zone = '+00:00';
SELECT DATEDIFF(d, FROM_UNIXTIME(0)) * 86400 +
TIME_TO_SEC(
TIMEDIFF(
d,
DATE_ADD(MAKEDATE(YEAR(d), DAYOFYEAR(d)), INTERVAL 0 HOUR)
)
) INTO ts;
SET time_zone = tz;
return ts;
END|
DELIMITER ;
[/sql]

Poi usata ad esempio così:

[sql]
UPDATE fe_users SET
`date_of_birth` = SIGNED_UNIX_TIMESTAMP('1955-10-21'),
WHERE 1
[/sql]

Nota: il campo date_of_birth è aggiunto dall'estensione sr_feuser_register