Convierta la marca de tiempo a la fecha en la consulta MySQL


188

Quiero convertir un timestampen MySQL a una fecha.

Me gustaría formatear el campo user.registration en el archivo de texto como a yyyy-mm-dd.

Aquí está mi SQL:

$sql = requestSQL("SELECT user.email, 
                   info.name, 
                   FROM_UNIXTIME(user.registration),
                   info.news
                   FROM user, info 
                   WHERE user.id = info.id ", "export members");

También probé la conversión de fecha con:

DATE_FORMAT(user.registration, '%d/%m/%Y')
DATE(user.registration)

Repito el resultado antes de escribir el archivo de texto y obtengo:

email1; nombre1; DATE_FORMAT (registro de usuario, '% d /% m /% Y'); noticias1

correo electrónico2; nombre2; noticias2

¿Cómo puedo convertir ese campo hasta la fecha?


¿Está guardando el archivo exactamente así? ¿Cuál es el código que está utilizando para ejecutar la consulta SQL?
— seanbreeden

1
Edité mi pregunta, requeteSQL está ejecutando la consulta
— remyremy

Respuestas:


373
DATE_FORMAT(FROM_UNIXTIME(`user.registration`), '%e %b %Y') AS 'date_formatted'

2
A partir de MySQL 5.6.23, encuentro que el valor de FROM_UNIXTIME () debe ingresarse directamente: es decir, DATE_FORMAT (FROM_UNIXTIME (user.registration), '% e% b% Y') AS 'date_formatted'
— JESii

SELECT * FROM users WHERE DATE_FORMAT (FROM_UNIXTIME ( users. user_created_at), '% Y-% b-% e') = '2015-03-06' es este formato correcto o debería modificarlo?
— Dheeraj Thedijje

2
@DheerajThedijje esto aparece como 2018-Nov-6. Es posible que esté buscando '%Y-%m-%d'como formatearlo en PHP (date('Y-m-d',$row->user_created_at)): esto (ambas variantes, SQL y PHP) aparece como 2018-11-06
— Chris S.

En caso de que desee agregar el tiempo de esta manera "hh: mm: ss", agréguelo a la cadena de formato '% H:% i:% s'
— luis.ap.uyen

64

Convierta la marca de tiempo a la fecha en MYSQL

Haga la tabla con una marca de tiempo entera:

mysql> create table foo(id INT, mytimestamp INT(11));
Query OK, 0 rows affected (0.02 sec)

Insertar algunos valores

mysql> insert into foo values(1, 1381262848);
Query OK, 1 row affected (0.01 sec)

Echar un vistazo

mysql> select * from foo;
+------+-------------+
| id   | mytimestamp |
+------+-------------+
|    1 |  1381262848 |
+------+-------------+
1 row in set (0.00 sec)

Convierta el número en una marca de tiempo:

mysql> select id, from_unixtime(mytimestamp) from foo;
+------+----------------------------+
| id   | from_unixtime(mytimestamp) |
+------+----------------------------+
|    1 | 2013-10-08 16:07:28        |
+------+----------------------------+
1 row in set (0.00 sec)

Conviértalo a un formato legible:

mysql> select id, from_unixtime(mytimestamp, '%Y %D %M %H:%i:%s') from foo;
+------+-------------------------------------------------+
| id   | from_unixtime(mytimestamp, '%Y %D %M %H:%i:%s') |
+------+-------------------------------------------------+
|    1 | 2013 8th October 04:07:28                       |
+------+-------------------------------------------------+
1 row in set (0.00 sec)

por favor fijar% h a% H
— Tomot

61

Para obtener una cita, puedes casthacerlo

cast(user.registration as date)

y para obtener un formato específico use date_format

date_format(registration, '%Y-%m-%d')

Demostración de SQLFiddle


Da el mismo resultado, se muestra emitir (registro de usuario como fecha) en lugar del valor del campo
— remyremy

55
Sin embargo, esto funcionó - cast (from_unixtime (user.registration) AS date)
— Eric Ness

tengo un formato de fecha específico que funcionó para mí lo mejor posible gracias
— saber tabatabaee yazdi

use "como DATETIME" para obtener horas minutos y segundos también
— Enrique

Creo que esta respuesta es la solución corta y clara. Prefiero esto.
— Roman Matveev

18

Si el registrationcampo es de tipo TIMESTAMP, debería poder hacer:

$sql = "SELECT user.email, 
           info.name, 
           DATE(user.registration), 
           info.news
      FROM user, 
           info 
     WHERE user.id = info.id ";

y el registro debe aparecer como aaaa-mm-dd


Lo intenté pero obtengo el mismo resultado: DATE (user.registration) se muestra en lugar del valor del campo
— remyremy

como alguien sugirió, ¿puede ejecutar la consulta con éxito utilizando el cliente mysql directamente? No he oído hablar de la función requeteSQL, ¿qué hace exactamente?
— cs0lar

Desafortunadamente no puedo usar un cliente mysql directamente, no tengo mi propio servidor ... He proporcionado requeteSQL, básicamente solo ejecuta la consulta y prueba si hay un error al enviar correos electrónicos ...
— remyremy

2
En realidad, me di cuenta de que mi campo era de tipo BIGINT y no de TIMESTAMP. Solo el contenido era una marca de tiempo (1328649722), por eso no funcionó. ¡Ahora todo está bien con FROM_UNIXTIME!
— remyremy

Esto funciona bien. Lo probé con datetime, ya que solo necesitaba obtener la parte de la fecha.
— ericsicons

10

Simplemente use la función DATE de mysql:

mysql> select DATE(mytimestamp) from foo;

55
SELECT DATE(UNIX_TIMESTAMP())escupe NULLen mi MySQL 5.7.14
— Xenos

pruebe DATE (CURRENT_TIMESTAMP ())
— Morey


2

Si recibe la consulta en su salida, debe mostrarnos el código que realmente refleja el resultado. ¿Puedes publicar el código que llama a requeteSQL?

Por ejemplo, si ha usado comillas simples en php, imprimirá el nombre de la variable, no el valor

echo 'foo is $foo'; // foo is $foo

Esto suena exactamente como su problema y estoy seguro de que esta es la causa.

Además, intente eliminar el símbolo @ para ver si eso ayuda al brindarle más información.

así que eso

$SQL_result = @mysql_query($SQL_requete); // run the query

se convierte

  $SQL_result = mysql_query($SQL_requete); // run the query

Esto detendrá cualquier supresión de errores si la consulta arroja un error.


2

Lo hice con la función 'fecha' como se describe aquí :

(SELECT count(*) as the-counts,(date(timestamp)) as the-timestamps FROM `user_data` WHERE 1 group BY the-timestamps)

2

FROM_UNIXTIME(unix_timestamp, [format]) es todo lo que necesitas

FROM_UNIXTIME(user.registration, '%Y-%m-%d') AS 'date_formatted'

FROM_UNIXTIMEobtiene un valor numérico y lo transforma en un DATEobjeto,
o si se le da una cadena de formato, lo devuelve como una cadena.

La solución anterior era obtener el objeto de fecha inicial y formatearlo con una segunda función DATE_FORMAT... pero esto ya no es necesario


1

Tratar:

SELECT strftime("%Y-%d-%m", col_name, 'unixepoch') AS col_name

Formateará la marca de tiempo en milisegundos a cadena aaaa-mm-dd.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.