Metody formatowania PostgreSQL obejmują użyteczny zbiór narzędzi do tłumaczenia różnych typów danych (data/godzina, liczba całkowita, zmiennoprzecinkowa, numeryczna) na sformatowane łańcuchy i tłumaczenie sformatowanych łańcuchów z powrotem na unikalne typy danych. Odtąd czasami musimy również przeliczać strefy czasowe. Czas jest zawsze rejestrowany w UTC w znacznikach czasu PostgreSQL dla formularza danych strefy czasowej, ale jest wyświetlany domyślnie w przeglądarce, sesji lub czasie lokalnym użytkownika. Jedną z jego funkcji pomocniczych, na których polegamy, jest metoda TO_CHAR(), która umożliwia między innymi umieszczanie znaczników czasu i znaczników czasu ze strefą czasową oraz umożliwia rozmieszczenie fragmentów znacznika czasu w dowolny sposób. Znacznik czasu, podwójna precyzja, czas trwania, liczba lub wartość liczbowa mogą zostać przekonwertowane na ciąg znaków za pomocą metody PostgreSQL TO_CHAR(). Wydaje się, że istnieje metoda jednoargumentowa, „to_timestamp”, która przyjmuje argument o podwójnej precyzji i przekształca z epoki Uniksa na znacznik czasu przy użyciu strefy czasowej. W tym poście pokażemy Ci, jak coś z tym zrobić. Przyjrzyjmy się najpierw to_char().
Składnia:
Ogólna składnia funkcji to_char() jest następująca:
>> To_znak( wyrażenie, format );Metoda TO_CHAR() w PostgreSQL wymaga dwóch asercji:
- Wyrażenie: Znacznik czasu, czas trwania, liczba, podwójna precyzja lub wartość liczbowa, która jest tłumaczona na łańcuch zgodnie z określonym formatem, mogą być używane jako wyrażenia.
- Format: Styl, w którym zostanie pokazany ciąg wyjściowy. Format może się różnić w zależności od typu wyrażenia, e.sol., numer, data.
W PostgreSQL dostępne są dwa typy znaczników czasu:
- Znak czasu: bez strefy czasowej.
- Sygnatura czasowa: ze strefą czasową.
I oto problem: standardowy formularz danych sygnatury czasowej nie zna stref czasowych. I jest to konieczność SQL (jak to mogło nastąpić, wydaje się poza tym). Naszym głównym celem jest nauka to_Char() znacznik czasu ze strefą czasową. Aby rozpocząć pracę z PostgreSQL za pomocą funkcji 'to_char()', otwórz powłokę wiersza poleceń PostgreSQL i podaj wartości parametrów dla obowiązkowego serwera, bazy danych, numeru portu, nazwy użytkownika i hasła. Pozostaw te uwagi niewypełnione, jeśli chcesz użyć domyślnych wyznaczonych parametrów, jak pokazano na poniższym obrazku.
To_char() Dla numeru ciągu
Aby zrozumieć koncepcję funkcji to_Char() używającej znacznika czasu ze strefą czasową, musisz najpierw wypróbować przykład liczb ciągów. Mamy więc numer „1897” i przekonwertujemy go na „9999”.Format 99' przy użyciu poniższego zapytania. Z poniższych danych wyjściowych widać, że numer ciągu został przekonwertowany na określony format.
>> WYBIERZ do_znaku(1897, '9999.99');
Oto kolejna ilustracja do konwersji. Tym razem przekonwertowaliśmy liczbę na inny format, w której znajduje się „przecinek”. Znak „G” będzie używany do określenia przecinka.
>> WYBIERZ do_znaku(367.78, „9G999”.99');
To_char znacznik czasu ze strefą czasową
Aby zrozumieć pojęcie znacznika czasu ze strefą czasową, rozważmy prosty przykład. Załóżmy, że jesteś w „Pakistanie”, więc Twoja strefa czasowa musi być teraz „PKT”.
Przykład 01:
Spróbujmy pobrać aktualny znacznik czasu w zapytaniu SELECT podczas konwertowania go do formatu Data-czas, jak pokazano w poniższym zapytaniu. Termin „TZ” jest używany do zwrócenia aktualnej strefy czasowej. Dane wyjściowe wyświetlają dzień, datę, godzinę i strefę czasową.
>> SELECT to_char(CURRENT_TIMESTAMP, 'Dzień Pon dd, rrrr HH12:MI AM (TZ)');
Zmieńmy naszą strefę czasową na „Europa/Rzym”.
>> USTAW strefę czasową= 'Europa/Rzym';
Po wypróbowaniu tego samego zapytania SELECT otrzymasz inny czas, datę i strefę czasową, jak pokazano.
Przykład 02:
Po określeniu strefy czasowej w zapytaniu SELECT dane wyjściowe nie będą pokazywać bieżącej strefy czasowej zgodnie z poniższymi danymi wyjściowymi.
>> SELECT to_char(CURRENT_TIMESTAMP W STREFIE CZASOWEJ 'Azja/Jerozolima', 'rrrr HH12:MI AM (TZ)');
Przykład 03:
Stwórzmy szybką tabelę o nazwie „czas” z dwoma polami. Jeden jest typu TIMESTAMP, a drugi typu TIMESTAMPTZ.
>> CREATE TABLE time( without_timezone TIMESTAMP, with_timezone TIMESTAMPTZ);
Teraz sprawdźmy aktualną strefę czasową, której używaliśmy w naszym systemie za pomocą polecenia SHOW w powłoce w następujący sposób:
>> POKAŻ strefę czasową;
Teraz musisz wstawić aktualne wartości daty i czasu aktualnej strefy czasowej, których używałeś na swoim urządzeniu w tabeli "czas" za pomocą funkcji "now()" jak pokazano poniżej.
>> WSTAW W WARTOŚCI czasu (now(), now());
Teraz możesz pobrać rekord z tabeli „czas” za pomocą zapytania SELECT, jak poniżej. Kolumna „without_timezone” pokazuje aktualną datę i godzinę bez strefy czasowej, natomiast kolumna „with_timezone” pokazuje czas lokalny z pełną strefą czasową.
>> WYBIERZ * Z czasu;
Zmieńmy strefę czasową na „US/EASTERN” z poniższego zapytania.
>> USTAW STREFĘ CZASOWĄ SESJI 'USA/WSCHODNIA';
Teraz jeszcze raz sprawdźmy tabelę. Zobaczysz, jak wartość kolumny „with_timezone” została wyświetlona zgodnie ze strefą czasową „US/EASTERN”, ale wartość „without_timezone” jest taka sama jak wcześniej.
>> WYBIERZ * Z czasu;
Przykład 04:
Zróbmy jeszcze kilka przykładów metody to_char(). Załóżmy, że w powyższej tabeli „czas”. Będziemy konwertować wartość kolumny „without_timezone” na ciąg składający się z godzin, minut, sekund i strefy czasowej. Wypróbujmy zapytanie SELECT przy użyciu metody to_char() do konwersji wartości kolumny „bez_strefy czasowej”. W naszym zapytaniu wspomnieliśmy „TZ”, ale nie pokaże strefy czasowej, ponieważ wartość kolumny nie zawiera strefy czasowej. Poniższe polecenie daje wynik:
>> SELECT to_char(bez_timezone, 'HH12:MI:SS TZ') FROM time;
Teraz wypróbujmy to samo zapytanie w przypadku drugiej kolumny „with_timezone”, aby przekonwertować ją na ciąg godzin, minut, sekund i strefy czasowej. Tym razem pokaże strefę czasową z czasem za pomocą poniższego zapytania.
>> SELECT to_char(with_timezone, 'HH12:MI:SS TZ') FROM time;
Wniosek:
Ponieważ problem z/bez strefy czasowej dotyczy nie tylko partycjonowania tabel, zalecam używanie typu strefy czasowej, gdy tylko jest to możliwe. Prawie wszystkie wytyczne omawiały, jak przeprowadzić zależne od czasu czyszczenie w PostgreSQL przy użyciu lokalnych godzin. Właściwe rozwiązanie uwzględniające strefę czasową wprowadza niewielkie komplikacje, ale może uchronić Cię przed problemami w przyszłości.