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?

remiremy
sumber
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'
Yatin
sumber
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)
Eric Leschinski
sumber
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

juergen d
sumber
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

cs0lar
sumber
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;
Morey
sumber
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

Jaydeep Mor
sumber
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.

Fraser
sumber
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)
Emanuel Graf
sumber
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

d.raev
sumber
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.

Vitaliy A
sumber