Konwertuj znacznik czasu na datę w zapytaniu MySQL


188

Chcę przekonwertować timestampw MySQL na datę.

Chciałbym sformatować pole user.registration w pliku tekstowym jako yyyy-mm-dd.

Oto mój SQL:

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

Próbowałem także konwersji daty z:

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

Powtarzam wynik przed zapisaniem pliku tekstowego i otrzymuję:

email1; name1; DATE_FORMAT (rejestracja użytkownika, '% d /% m /% Y'); aktualności1

email2; name2; news2

Jak mogę przekonwertować to pole do tej pory?


Zapisuje plik dokładnie tak? Jakiego kodu używasz do uruchomienia zapytania SQL?
seanbreeden

1
Zredagowałem moje pytanie, requeteSQL uruchamia zapytanie
remyremy

Odpowiedzi:


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

2
Począwszy od MySQL 5.6.23, uważam, że wartość FROM_UNIXTIME () powinna być wprowadzana bezpośrednio: tj. DATE_FORMAT (FROM_UNIXTIME (user.registration), '% e% b% Y') AS 'date_formatted'
JESii

WYBIERZ * OD UŻYTKOWNIKÓW GDZIE DATA_FORMAT (FROM_UNIXTIME ( users. user_created_at), „% Y-% b-% e”) = „2015-03-06” to poprawny format, czy powinienem go zmodyfikować?
Dheeraj Thedijje

2
@DheerajThedijje pokazuje się jako 2018-lis-6. Być może szukasz tego '%Y-%m-%d', co sformatujesz w PHP (date('Y-m-d',$row->user_created_at))- to (oba warianty, SQL i PHP) pokazuje się jako 2018-11-06
Chris S.

Jeśli chcesz dodać czas w ten sposób „gg: mm: ss”, dodaj go do ciągu formatu „% H:% i:% s”
luis.ap.uyen

64

Konwertuj znacznik czasu na datę w MYSQL

Stwórz tabelę z całkowitym znacznikiem czasu:

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

Wstaw niektóre wartości

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

Spójrz

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

Konwertuj liczbę na znacznik czasu:

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)

Konwertuj go na czytelny format:

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)

napraw% h do% H
Tomot

61

Aby dostać datę, możesz castto zrobić

cast(user.registration as date)

i uzyskać określony format date_format

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

Demo SQLFiddle


Daje ten sam wynik, zamiast wartości pola wyświetlana jest obsada (user.registration as date)
remyremy

5
To zadziałało - obsada (od_unixtime (user.registration) AS date)
Eric Ness

Mam określony format daty, który mi zadziałał, a także możliwe dzięki
Saber Tabatabaee Yazdi

użyj „jako DATETIME”, aby uzyskać godzinę, minuty i sekundy
Enrique

Myślę, że ta odpowiedź jest krótkim i jasnym rozwiązaniem. Wolę to.
Roman Matveev

18

Jeśli registrationpole jest rzeczywiście typu TIMESTAMP, powinieneś być w stanie zrobić:

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

a rejestracja powinna być wyświetlana jako rrrr-mm-dd


Próbowałem, ale otrzymuję ten sam wynik: zamiast wartości pola wyświetlana jest DATA (user.registration)
remyremy

jak ktoś zasugerował, czy możesz pomyślnie uruchomić zapytanie bezpośrednio za pomocą klienta mysql? Nie słyszałem o funkcji RequeteSQL, co ona właściwie robi?
cs0lar

Niestety nie jestem w stanie używać klienta mysql bezpośrednio, nie mam mój własny serwer ... Mam pod warunkiem requeteSQL, w zasadzie to po prostu uruchomić kwerendę i testu jeśli błąd wysyłać e-maile ...
remyremy

2
W rzeczywistości zdałem sobie sprawę, że moje pole było typu WIELKIEGO, a nie TIMESTAMP. Tylko treść była znacznikiem czasu (1328649722), więc dlatego nie działała. Teraz wszystko jest w porządku z FROM_UNIXTIME!
remyremy,

Działa dobrze. Próbowałem z datetime, ponieważ potrzebowałem tylko porcji daty.
ericsicons,

10

Wystarczy użyć funkcji DATE mysql:

mysql> select DATE(mytimestamp) from foo;

5
SELECT DATE(UNIX_TIMESTAMP())pluje NULLw moim MySQL 5.7.14
Xenos

spróbuj DATE (CURRENT_TIMESTAMP ())
Morey,


2

Jeśli otrzymujesz zapytanie w danych wyjściowych, musisz pokazać nam kod, który faktycznie odzwierciedla wynik. Czy umiesz opublikować kod wywołujący requeteSQL?

Na przykład, jeśli użyłeś pojedynczych cudzysłowów w php, to wypisze nazwę zmiennej, a nie wartość

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

Brzmi dokładnie jak twój problem i jestem przekonany, że to jest przyczyna.

Spróbuj także usunąć symbol @, aby sprawdzić, czy to pomoże, zwiększając ilość informacji.

po to aby

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

staje się

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

Spowoduje to zatrzymanie pomijania błędów, jeśli zapytanie zgłosi błąd.


2

Zrobiłem to z funkcją „data”, jak opisano tutaj :

(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]) to wszystko czego potrzebujesz

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

FROM_UNIXTIMEpobiera wartość liczbową i przekształca ją w DATEobiekt
lub jeśli otrzyma ciąg formatu, zwraca go jako ciąg.

Starszym rozwiązaniem było pobranie początkowego obiektu daty i sformatowanie go za pomocą drugiej funkcji DATE_FORMAT... ale nie jest to już konieczne


1

Próbować:

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

Sformatuje znacznik czasu w milisekundach do ciągu rrrr-mm-dd.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.