MySQL sorgusunda zaman damgasını tarihe dönüştür


188

timestampMySQL'de bir tarihe dönüştürmek istiyorum .

User.registration alanını bir metin dosyasına biçimlendirmek istiyorum yyyy-mm-dd.

İşte benim SQL:

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

Ayrıca tarih dönüşüm denedim:

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

Önce metin dosyasını yazmak için sonucu yankı ve ben olsun:

email1; ad1; DATE_FORMAT (kullanıcı.kayıt, '% d /% m /% Y'); haberler1

Email2; ad2; news2

Bu alanı bugüne nasıl dönüştürebilirim?


Dosya tam olarak böyle mi kaydediliyor? Sql sorgusunu çalıştırmak için kullandığınız kod nedir?
seanbreeden

1
Sorumu düzenledim, requeteSQL sorguyu çalıştırıyor
remyremy

Yanıtlar:


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

2
MySQL 5.6.23 itibariyle, FROM_UNIXTIME () değerinin doğrudan girilmesi gerektiğini görüyorum: yani, DATE_FORMAT (FROM_UNIXTIME (kullanıcı.kayıt), '% e% b% Y') AS 'date_formatted'
JESii

SEÇ * Kullanıcılardan DATE_FORMAT NEREDE (FROM_UNIXTIME ( users. user_created_at), '% Y-% b-% e') = '2015-03-06' bu doğru biçim mi yoksa bunu değiştirmeli miyim?
Dheeraj Thedijje

2
@DheerajThedijje 2018-Kasım-6 olarak ortaya çıkıyor. '%Y-%m-%d'PHP'de biçimlendirdiğiniz gibi arıyor olabilirsiniz (date('Y-m-d',$row->user_created_at))- bu (her iki varyant, SQL ve PHP) 2018-11-06
Chris S.

Bu şekilde "ss: dd: ss" biçiminde zaman eklemek isterseniz, bunu '% H:% i:% s' biçimine ekleyin
luis.ap.uyen

64

MYSQL'de zaman damgasını tarihe dönüştür

Tabloyu tamsayı zaman damgası ile yapın:

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

Bazı değerler ekle

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

Bir göz at

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

Sayıyı bir zaman damgasına dönüştürün:

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)

Okunabilir bir biçime dönüştürün:

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)

lütfen% h değerini% H olarak düzeltin
Tomot

61

Sadece bir randevu almak castiçin

cast(user.registration as date)

ve belirli bir format kullanımı elde etmek için date_format

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

SQLFiddle demosu


Aynı sonucu verir, alanın değeri yerine cast (tarih olarak user.registration) görüntülenir
remyremy

5
Bu olsa işe yaradı - cast (from_unixtime (kullanıcı.kayıt tarihi) AS tarihi)
Eric Ness

Ben onun benim için çalıştı bu belirli tarih biçimini yanı sıra olası sayesinde var
kılıç Tabatabaee Yazdi

saat dakika ve saniye de almak için "DATETIME olarak" kullanın
Enrique

Bu cevabın kısa ve net bir çözüm olduğunu düşünüyorum. Bunu tercih ederim.
Roman Matveev

18

Eğer registrationalan türü gerçekten de TIMESTAMPsadece yapmak mümkün olmalıdır:

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

ve kayıt yyyy-aa-gg olarak gösterilmelidir


Denedim ama aynı sonucu alıyorum: Alanın değeri yerine DATE (user.registration) görüntüleniyor
remyremy

birisinin önerdiği gibi, doğrudan mysql istemcisi kullanarak sorguyu başarıyla çalıştırabilir misiniz? RequeteSQL işlevini duymadım, tam olarak ne yapıyor?
cs0lar

Ne yazık ki doğrudan bir mysql istemcisi kullanamıyorum, kendi sunucum yok ... RequeteSQL sağladım, temelde sadece sorgu çalıştırmak ve e-posta göndermek için hata olup olmadığını test ...
remyremy

2
Aslında alanımın bir TIMESTAMP değil BIGINT tipi olduğunu fark ettim. Yalnızca içerik bir zaman damgasıydı (1328649722), bu yüzden işe yaramadı. Artık FROM_UNIXTIME ile her şey yolunda!
remyremy

Bu iş para cezası ben sadece tarih bölümünü almak için gerekli datetime ile denedim.
ericsicons

10

MySQL'in TARİH işlevini kullanmanız yeterlidir:

mysql> select DATE(mytimestamp) from foo;

5
SELECT DATE(UNIX_TIMESTAMP())NULLbenim MySQL 5.7.14 tükürür
Xenos

DATE (CURRENT_TIMESTAMP ()) deneyin
Morey

7

Dönüştürmeniz timestampgerekir date.

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

FROM_UNIXTIME


2

Sorguyu çıktılarınızda alıyorsanız, sonucu gerçekten yansıtan kodu bize göstermeniz gerekir. RequeteSQL çağıran kodu gönderebilir misiniz?

Örneğin, php'de tek tırnak kullandıysanız, değişken adını yazdırır, değeri değil

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

Bu tam olarak sizin probleminiz gibi görünüyor ve sebebinin bu olduğunu düşünüyorum.

Ayrıca, size daha fazla bilgi vererek bunun işe yarayıp yaramadığını görmek için @ simgesini kaldırmayı deneyin.

Böylece

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

olur

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

Bu, sorgu bir hata atıyorsa herhangi bir hata bastırmayı durduracaktır.


2

Burada açıklandığı gibi 'tarih' fonksiyonu ile yaptım :

(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]) tüm ihtiyacın olan

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

FROM_UNIXTIMEbir sayı değeri alır ve onu bir DATEnesneye dönüştürür ,
veya bir biçim dizesi verilirse, onu dize olarak döndürür.

Daha eski çözüm, ilk tarih nesnesini almak ve ikinci bir işlevle biçimlendirmekti DATE_FORMAT... ama artık gerekli değil


1

Deneyin:

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

Zaman damgasını milisaniye olarak yyyy-aa-gg dizesine biçimlendirir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.