sql >> Databáze >  >> RDS >> PostgreSQL

Jak převést řetězec na časové razítko bez časového pásma

Řetězcová reprezentace timestamp (=timestamp without time zone ) závisí na vašem místním nastavení. Abyste se vyhnuli nejasnostem vedoucím k chybám v datech nebo aby se Postgres vykašlal na výjimku, máte dvě možnosti:

1.) Použijte formát ISO 8601 , který funguje stejně s libovolným národní prostředí nebo DateStyle nastavení:

'2013-08-20 14:52:49'

Možná budete muset přetypovat řetězcový literál explicitně tam, kde datový typ nelze odvodit z kontextu, v závislosti na případu použití:

'2013-08-20 14:52:49'::timestamp

2.) Převeďte řetězec na timestamp pomocí to_timestamp() s odpovídajícím vzorem šablony:

to_timestamp('20/8/2013 14:52:49', 'DD/MM/YYYY hh24:mi:ss')

To vrátí timestamptz , za předpokladu aktuálního nastavení časového pásma. Typicky (jako v zadání) je typ odpovídajícím způsobem vynucen. Pro timestamp , to znamená, že časový posun je zkrácen a získáte očekávanou hodnotu. Pokud cílový typ nelze odvodit z kontextu, možná budete muset přetypovat explicitně:

to_timestamp('20/8/2013 14:52:49', 'DD/MM/YYYY hh24:mi:ss')::timestamp

Protože to jednoduše odstraní časový posun, výsledkem je očekávaná hodnota. Nebo použijte AT TIME ZONE vytvořit s časovým pásmem dle vašeho výběru:

to_timestamp('20/8/2013 14:52:49', 'DD/MM/YYYY hh24:mi:ss') AT TIME ZONE 'UTC'

Zatímco cílové časové pásmo je stejné jako vaše aktuální timezone nastavení, nedochází k žádné transformaci. Jinak je výsledné časové razítko odpovídajícím způsobem transponováno. Další čtení:

  • Úplné ignorování časových pásem v Rails a PostgreSQL


  1. Přidejte data do databáze sqlite pouze jednou a čtěte vícekrát

  2. Získejte nejnovější datum ze seskupených dat MySQL

  3. Co jsou Oracle Joins (Sql Joins)?

  4. Získání časového rozdílu mezi dvěma časy v PHP