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.