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.