Проблем:
Искате да получите текущата дата и час с информация за часовата зона от PostgreSQL база данни.
Решение:
Ще използваме или CURRENT_TIMESTAMP, или NOW(), за да получим текущата дата и час с изместване на часовата зона.
SELECT CURRENT_TIMESTAMP ;
Ето резултата от заявката:
2019-09-15 13:13:12.118432+02
Дискусия:
CURRENT_TIMESTAMP
връща текущата дата, час и изместване на часовата зона (използвайки датата, часа и часовата зона на машината, на която работи PostgreSQL). Това се връща като стойност в „ГГГГ-ММ-ДД hh:mm:ss.nnnnnn+/-tz“ формат. В този формат:
- ГГГГ е 4-цифрена година.
- ММ е двуцифрен месец.
- DD е двуцифрен ден от месеца.
- чх е двуцифрен час.
- мм е 2-цифрена минута.
- с е 2-цифрена секунда.
- nnnnnn дефинира броя на частните секунди (т.е. точността) от 0 до 6.
- +tz или -tz е изместването на часовата зона, плюс или минус спрямо UTC.
Както забелязвате, тази функция няма скоби. Въпреки това, ако искате да покажете дата и час с конкретна точност, можете да използвате незадължителния целочислен аргумент. Връща дата и час с части от секунди и изместване на часовата зона. Този аргумент трябва да е в диапазона от 0 до 6; 0 не е дробна секунда, 1 е една дробна секунда (например едно място след десетичната запетая) и т.н. Вижте следващия пример:
SELECT CURRENT_TIMESTAMP(3) ;
Ето резултата от заявката:
2019-09-15 13:01:51.142+02
Този резултат съдържа 3-цифрена част от секундата, защото сме поставили 3 като аргумент във функцията CURRENT_TIMESTAMP. Изместването на часовата зона все още се показва в края.
Времето, върнато от тази функция, не се променя по време на транзакции или една заявка. Винаги е моментът, в който транзакцията е започнала.
NOW() е подобен на CURRENT_TIMESTAMP
функция и връща същия резултат. Разликата е, че CURRENT_TIMESTAMP
е стандартната функция на SQL, докато NOW() е специфична за PostgreSQL.
SELECT NOW() ;
Ето резултата от заявката:
2019-08-27 12:18:55.324145+02
Имайте предвид, че функцията NOW() изисква скоби. Можете обаче да ги оставите празни и да получите стойността по подразбиране.
CURRENT_TIMESTAMP и NOW() връщат timestamptz тип данни.