Konversi stempel waktu ke tanggal dalam kueri MySQL


188

Saya ingin mengonversi timestampdi MySQL ke tanggal.

Saya ingin memformat bidang user.registration ke dalam file teks sebagai yyyy-mm-dd.

Inilah SQL saya:

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

Saya juga mencoba konversi tanggal dengan:

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

Saya mengulangi hasil sebelumnya untuk menulis file teks dan saya mendapatkan:

email1; name1; DATE_FORMAT (user.registration, '% d /% m /% Y'); news1

email2; name2; news2

Bagaimana saya bisa mengonversi bidang itu menjadi tanggal?


Ini menyimpan file persis seperti itu? Apa kode yang Anda gunakan untuk menjalankan kueri sql?
seanbreeden

1
Saya mengedit pertanyaan saya, requeteSQL menjalankan kueri
remyremy

Jawaban:


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

2
Pada MySQL 5.6.23, saya menemukan bahwa nilai untuk FROM_UNIXTIME () harus dimasukkan secara langsung: yaitu, DATE_FORMAT (FROM_UNIXTIME (user.registration), '% e% b% Y') AS 'date_formatted'
JESii

SELECT * DARI pengguna DI MANA DATE_FORMAT (FROM_UNIXTIME ( users. user_created_at), '% Y-% b-% e') = '2015-03-06' apakah ini format yang benar atau haruskah saya memodifikasi ini?
Dheeraj Thedijje

2
@DheerajThedijje ini muncul sebagai 2018-Nov-6. Anda mungkin mencari karena '%Y-%m-%d'Anda akan memformatnya dalam PHP (date('Y-m-d',$row->user_created_at))- ini (kedua varian, SQL dan PHP) muncul sebagai 2018-11-06
Chris S.

Jika Anda ingin menambahkan waktu dengan cara ini "hh: mm: ss", tambahkan ini ke format string '% H:% i:% s'
luis.ap.uyen

64

Konversi stempel waktu ke tanggal di MYSQL

Buat tabel dengan cap waktu bilangan bulat:

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

Masukkan beberapa nilai

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

Lihatlah

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

Ubah nomor menjadi stempel waktu:

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)

Konversikan ke dalam format yang dapat dibaca:

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)

tolong perbaiki% h hingga% H
Tomot

61

Untuk mendapatkan kencan Anda bisa castmelakukannya

cast(user.registration as date)

dan untuk mendapatkan penggunaan format tertentu date_format

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

Demo SQLFiddle


Ini memberikan hasil yang sama, cast (user.registration as date) ditampilkan sebagai ganti nilai field
remyremy

5
Ini berhasil meskipun - cast (from_unixtime (user.registration) AS date)
Eric Ness

saya memiliki format tanggal tertentu yang berfungsi untuk saya sebaik mungkin terima kasih
saber tabatabaee yazdi

gunakan "sebagai DATETIME" untuk mendapatkan jam menit dan detik juga
Enrique

Saya pikir jawaban ini adalah solusi singkat dan jelas. Saya lebih memilih ini.
Roman Matveev

18

Jika registrationbidangnya memang tipe TIMESTAMPAnda harus bisa hanya melakukan:

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

dan pendaftaran harus ditampilkan sebagai tttt-bb-hh


Saya mencoba tetapi saya mendapatkan hasil yang sama: DATE (user.registration) ditampilkan sebagai ganti nilai bidang
remyremy

seperti yang disarankan seseorang, apakah Anda dapat menjalankan kueri dengan sukses menggunakan klien mysql secara langsung? Saya belum pernah mendengar tentang fungsi requeteSQL, apa fungsinya sebenarnya?
cs0lar

Sayangnya saya tidak dapat menggunakan klien mysql secara langsung, saya tidak memiliki server sendiri ... Saya telah menyediakan requeteSQL, pada dasarnya itu hanya menjalankan permintaan dan menguji apakah ada kesalahan untuk mengirim email ...
remyremy

2
Sebenarnya saya menyadari bahwa bidang saya adalah tipe BIGINT dan bukan TIMESTAMP. Hanya konten yang merupakan cap waktu (1328649722), jadi itu sebabnya tidak bekerja. Sekarang semuanya baik-baik saja dengan FROM_UNIXTIME!
remyremy

Ini berfungsi dengan baik saya mencobanya dengan datetime karena saya hanya perlu mendapatkan bagian tanggal.
ericsicons

10

Cukup gunakan fungsi DATE mysql:

mysql> select DATE(mytimestamp) from foo;

5
SELECT DATE(UNIX_TIMESTAMP())meludah NULLdi MySQL 5.7.14 saya
Xenos

coba DATE (CURRENT_TIMESTAMP ())
Morey

7

Anda harus mengonversi timestampke date.

select FROM_UNIXTIME(user.registration, '%Y-%m-%d %H:%i:%s') AS 'date_formatted'

FROM_UNIXTIME


2

Jika Anda mendapatkan kueri dalam output Anda, Anda perlu menunjukkan kepada kami kode yang benar-benar menggemakan hasilnya. Bisakah Anda memposting kode yang memanggil requeteSQL?

Misalnya, jika Anda telah menggunakan tanda kutip tunggal dalam php, itu akan mencetak nama variabel, bukan nilainya

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

Ini terdengar persis seperti masalah Anda dan saya yakin ini penyebabnya.

Juga, coba hapus simbol @ untuk melihat apakah itu membantu dengan memberi Anda lebih banyak informasi.

yang seperti itu

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

menjadi

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

Ini akan menghentikan penekanan kesalahan apa pun jika kueri melempar kesalahan.


2

Saya melakukannya dengan fungsi 'tanggal' seperti yang dijelaskan di sini :

(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]) itu yang kamu butuhkan

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

FROM_UNIXTIMEmendapat nilai angka dan mengubahnya menjadi DATEobjek,
atau jika diberi format string, ia mengembalikannya sebagai string.

Solusi yang lebih lama adalah mendapatkan objek tanggal awal dan memformatnya dengan fungsi kedua DATE_FORMAT... tetapi ini tidak lagi diperlukan


1

Mencoba:

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

Ini akan memformat stempel waktu dalam milidetik ke string yyyy-mm-dd.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.