LindormTable es compatible con cuatro funciones de tiempo para dar formato a las marcas de tiempo, convertir entre marcas de tiempo UNIX y marcas de tiempo locales de la sesión, y calcular diferencias entre fechas. Estas funciones solo aplican a LindormTable. Todas se ejecutan en la zona horaria de la sesión actual.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
LindormTable 2.7.8 o posterior (para DATE_FORMAT, FROM_UNIXTIME y DATEDIFF)
Lindorm SQL 2.8.7.0 o posterior (para DATE_FORMAT, FROM_UNIXTIME y DATEDIFF)
LindormTable 2.8.0 o posterior y Lindorm SQL 2.9.0.0 o posterior (para UNIX_TIMESTAMP)
Para consultar o actualizar la versión secundaria del motor de LindormTable, consulte Release notes of LindormTable y Upgrade the minor engine version of a Lindorm instance. Para consultar la versión de Lindorm SQL, consulte SQL versions.
Funciones compatibles
|
Función |
Descripción |
|
Da formato a una marca de tiempo mediante la zona horaria de la sesión actual. |
|
|
Convierte un valor de tipo numérico (BIGINT, INTEGER, SMALLINT o TINYINT) en una marca de tiempo mediante la zona horaria de la sesión actual. Es la operación inversa de UNIX_TIMESTAMP. |
|
|
Devuelve la diferencia en días entre dos marcas de tiempo, con base únicamente en los valores de fecha. |
|
|
Convierte una marca de tiempo o una cadena de marca de tiempo en una marca de tiempo UNIX. Devuelve un valor DOUBLE en segundos. Es la operación inversa de FROM_UNIXTIME. |
DATE_FORMAT
Da formato a una marca de tiempo mediante la zona horaria de la sesión actual. Para consultar o establecer la zona horaria de la sesión, consulte Specify a time zone for a LindormTable connection.
Sintaxis
DATE_FORMAT(TIMESTAMP ts, STRING format)
Parámetros
|
Parámetro |
Obligatorio |
Descripción |
|
|
Sí |
La marca de tiempo a la que se dará formato. |
|
|
Sí |
Una cadena de formato compuesta por especificadores de formato (por ejemplo, |
Ejemplo
Dé formato a la marca de tiempo 2024-01-01 17:20:35 como at 17:20:35 on Jan 1st, 2024:
SELECT DATE_FORMAT('2024-01-01 17:20:35', 'at %T on %b %D, %Y');
Salida:
+------------------------------+
| EXPR$0 |
+------------------------------+
| at 17:20:35 on JAN 1st, 2024 |
+------------------------------+
FROM_UNIXTIME
Convierte un valor de tipo numérico en una marca de tiempo mediante la zona horaria de la sesión actual. Esta función es la operación inversa de UNIX_TIMESTAMP. Acepta valores BIGINT, INTEGER, SMALLINT y TINYINT. El valor de entrada representa los segundos transcurridos desde 1970-01-01 00:00:00 UTC, y conserva hasta tres decimales.
Solo el protocolo MySQL permite cambiar la zona horaria de una conexión. Consulte Use the MySQL protocol to develop applications (recommended) y Use a MySQL client to connect to and use LindormTable .
Sintaxis
-- Convert a UNIX timestamp to a session-local timestamp.
FROM_UNIXTIME(Number seconds)
-- Convert and format the result.
-- Equivalent to: DATE_FORMAT(FROM_UNIXTIME(seconds), format)
FROM_UNIXTIME(Number seconds, STRING format)
La forma con dos parámetros equivale a llamar a DATE_FORMAT sobre el resultado de la forma con un solo parámetro. El parámetro format acepta los mismos especificadores que DATE_FORMAT. Para más detalles, consulte Especificadores de formato.
Parámetros
|
Parámetro |
Obligatorio |
Descripción |
|
|
Sí |
Una marca de tiempo UNIX en segundos. Se conservan hasta tres decimales. El valor representa los segundos transcurridos desde |
|
|
No |
Una cadena de formato. Utiliza los mismos especificadores que DATE_FORMAT. |
Ejemplos
Ejemplo 1: convertir una marca de tiempo UNIX
Convierta 10.1578 en una marca de tiempo mediante la zona horaria de la sesión actual:
SELECT FROM_UNIXTIME(10.1578);
Salida:
+-------------------------+
| EXPR$0 |
+-------------------------+
| 1970-01-01 08:00:10.158 |
+-------------------------+
Cambie la zona horaria de la sesión a +03:00 y vuelva a ejecutar la conversión:
-- Change the session time zone.
SET @@time_zone='+03:00';
-- Convert using the new time zone.
SELECT FROM_UNIXTIME(10.1578);
Salida:
+-------------------------+
| EXPR$0 |
+-------------------------+
| 1970-01-01 03:00:10.158 |
+-------------------------+
Ejemplo 2: convertir y dar formato
Convierta 10.1578 y dé formato al resultado mediante la zona horaria de la sesión actual:
SELECT FROM_UNIXTIME(10.1578, 'at %T on %b %D, %Y');
Salida:
+------------------------------+
| EXPR$0 |
+------------------------------+
| at 08:00:10 on JAN 1st, 1970 |
+------------------------------+
Cambie la zona horaria de la sesión a +03:00 y vuelva a aplicar el formato:
-- Change the session time zone.
SET @@time_zone='+03:00';
-- Convert and format using the new time zone.
SELECT FROM_UNIXTIME(10.1578, 'at %T on %b %D, %Y');
Salida:
+------------------------------+
| EXPR$0 |
+------------------------------+
| at 03:00:10 on JAN 1st, 1970 |
+------------------------------+
DATEDIFF
Devuelve la diferencia en días entre dos marcas de tiempo en la zona horaria de la sesión actual. El resultado equivale a ts1 - ts2 y compara únicamente los valores de fecha; las horas, los minutos y los segundos se ignoran.
Resultado positivo:
ts1corresponde a una fecha posterior ats2.Resultado negativo:
ts1corresponde a una fecha anterior ats2.Cero:
ts1yts2corresponden a la misma fecha.
Sintaxis
DATEDIFF(TIMESTAMP ts1, TIMESTAMP ts2)
Parámetros
|
Parámetro |
Obligatorio |
Descripción |
|
|
Sí |
La primera marca de tiempo. |
|
|
Sí |
La segunda marca de tiempo. |
Ejemplos
Ejemplo 1: ts1 es anterior a ts2
SELECT DATEDIFF('2024-01-01 15:30:00', '2024-01-02 00:59:59');
Salida:
+--------+
| EXPR$0 |
+--------+
| -1 |
+--------+
Ejemplo 2: ts1 es posterior a ts2
SELECT DATEDIFF('2024-01-05 15:30:00', '2024-01-02 00:59:59');
Salida:
+--------+
| EXPR$0 |
+--------+
| 3 |
+--------+
Ejemplo 3: ts1 y ts2 corresponden a la misma fecha
Las horas difieren, pero la fecha es la misma, por lo que el resultado es 0:
SELECT DATEDIFF('2024-01-02 15:30:00', '2024-01-02 00:59:59');
Salida:
+--------+
| EXPR$0 |
+--------+
| 0 |
+--------+
UNIX_TIMESTAMP
Convierte una marca de tiempo o una cadena de marca de tiempo en una marca de tiempo UNIX. Devuelve un valor DOUBLE. Esta función es la operación inversa de FROM_UNIXTIME.
UNIX_TIMESTAMP requiere LindormTable 2.8.0 o posterior y Lindorm SQL 2.9.0.0 o posterior. Si es necesario, actualice la versión secundaria del motor de LindormTable en la consola de Lindorm.
La precisión del valor devuelto depende del tipo de entrada:
Entrada TIMESTAMP: se conservan 3 decimales.
Entrada VARCHAR: la cadena representa la marca de tiempo en la zona horaria de la sesión actual. Se conservan hasta 6 decimales.
UNIX_TIMESTAMP se puede utilizar en:
La proyección (lista de columnas) de una instrucción SELECT
La WHERE clause de una SELECT statement
La cláusula VALUES de una UPSERT statement
Sintaxis
UNIX_TIMESTAMP(ts)
Parámetros
|
Parámetro |
Obligatorio |
Descripción |
|
|
Sí |
La marca de tiempo que se va a convertir. Debe ser de tipo TIMESTAMP o VARCHAR. |
Ejemplos
Cree una tabla e inserte datos de ejemplo:
-- Create a table with TIMESTAMP and VARCHAR timestamp columns.
CREATE TABLE t1(p1 INT, c1 TIMESTAMP, c2 VARCHAR, c3 DOUBLE, PRIMARY KEY(p1));
-- Insert sample rows.
UPSERT INTO t1(p1, c1, c2, c3) VALUES
(1, '2025-01-01 08:30:00', '2025-01-01 08:30:00', '12.24'),
(2, '1970-01-01 08:00:00.123', '1970-01-01 08:00:00.123', '10.32'),
(3, '1970-01-01 08:00:10.13579', '1970-01-01 08:00:10.13579', '10.12'),
(4, '1970-01-01 08:00:10.123456789','1970-01-01 08:00:10.123456789','17.33');
Ejemplo 1: consultar marcas de tiempo UNIX desde una tabla
Los valores TIMESTAMP (c1) conservan 3 decimales; los valores VARCHAR (c2) conservan hasta 6.
SELECT p1, UNIX_TIMESTAMP(c1), UNIX_TIMESTAMP(c2) FROM t1;
Salida:
+----+------------+------------+
| p1 | EXPR$1 | EXPR$2 |
+----+------------+------------+
| 1 | 1735691400 | 1735691400 |
| 2 | 0.123 | 0.123 |
| 3 | 10.135 | 10.13579 |
| 4 | 10.123 | 10.123457 |
+----+------------+------------+
Ejemplo 2: filtrar filas con UNIX_TIMESTAMP en una cláusula WHERE
Cuente las filas donde la marca de tiempo UNIX de c1 sea mayor que 10:
SELECT COUNT(*) FROM t1 WHERE UNIX_TIMESTAMP(c1) > 10;
Salida:
+--------+
| EXPR$0 |
+--------+
| 3 |
+--------+
Ejemplo 3: escribir el resultado de UNIX_TIMESTAMP en una columna DOUBLE
Utilice UNIX_TIMESTAMP en una cláusula VALUES para escribir el resultado directamente en la columna DOUBLE c3:
UPSERT INTO t1(p1, c3) VALUES(1, UNIX_TIMESTAMP('1970-01-01 08:00:00.123'));
Para comprobar el resultado, ejecute:
SELECT * FROM t1;
Especificadores de formato
A continuación se muestran los especificadores de formato compatibles con DATE_FORMAT y FROM_UNIXTIME.
Los caracteres de la cadena de formato que no comienzan con % se devuelven tal cual.
|
Especificador |
Salida |
Descripción |
|
|
Sun a Sat |
Nombre abreviado del día de la semana. |
|
|
Jan a Dec |
Nombre abreviado del mes. |
|
|
0 a 12 |
Mes como valor numérico. |
|
|
1st, 2nd, 3rd... |
Día del mes con sufijo ordinal. |
|
|
00 a 31 |
Día del mes con dos dígitos. |
|
|
00 a 31 |
Día del mes con dos dígitos. |
|
|
000000 a 999999 |
Microsegundos. |
|
|
00 a 23 |
Hora en formato de 24 horas con dos dígitos. |
|
|
01 a 12 |
Hora en formato de 12 horas con dos dígitos. |
|
|
01 a 12 |
Hora en formato de 12 horas con dos dígitos. |
|
|
00 a 59 |
Minutos con dos dígitos. |
|
|
001 a 366 |
Día del año con tres dígitos. |
|
|
0 a 23 |
Hora en formato de 24 horas como valor numérico. |
|
|
1 a 12 |
Hora en formato de 12 horas como valor numérico. |
|
|
January a December |
Nombre completo del mes. |
|
|
01 a 12 |
Mes con dos dígitos. |
|
|
AM o PM |
Indicador AM/PM. |
|
|
hh:mm:ss AM/PM |
Hora en formato de 12 horas. |
|
|
00 a 59 |
Segundos con dos dígitos. |
|
|
00 a 59 |
Segundos con dos dígitos. |
|
|
hh:mm:ss |
Hora en formato de 24 horas. |
|
|
Sunday a Saturday |
Nombre completo del día de la semana. |
|
|
0 a 6 |
Día de la semana como número. |
|
|
Año de cuatro dígitos |
Por ejemplo: |
|
|
Año de dos dígitos |
Basado en los últimos dos dígitos del año. Por ejemplo: |
|
|
% |
Un signo de porcentaje literal. |
|
|
x |
Cualquier letra que no sea un especificador reservado se devuelve tal cual. Por ejemplo: |