- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有表:
postgres=# create table foo (datetimes timestamptz);
CREATE TABLE
postgres=# \d+ foo
Table "public.foo"
Column | Type | Modifiers | Storage | Description
-----------+--------------------------+-----------+---------+-------------
datetimes | timestamp with time zone | | plain |
Has OIDs: no
所以让我们向其中插入一些值......
postgres=# insert into foo values
('2012-12-12'), --This is the value I want to catch for.
(null),
('2012-12-12 12:12:12'),
('2012-12-12 12:12');
INSERT 0 4
这就是我们所拥有的:
postgres=# select * from foo ;
datetimes
------------------------
2012-12-12 00:00:00+00
2012-12-12 12:12:12+00
2012-12-12 12:12:00+00
(4 rows)
理想情况下,我想在输入未提供 TIME 时设置默认时间戳值,而不是 2012-12-12
的实际时间 00:00:00
,我想设置默认值 15:45:10
。
意思是,我的结果应该如下所示:
postgres=# select * from foo ;
datetimes
------------------------
2012-12-12 15:45:10+00 --This one gets the default time.
2012-12-12 12:12:12+00
2012-12-12 12:12:00+00
(4 rows)
我不太确定如何在 postgres 8.4 中执行此操作,我在 datetime 中找不到任何内容手册部分或有关列默认值的部分。
最佳答案
可以在 BEFORE INSERT
触发器中调整新行的值。这样的触发器可以测试 NEW.datetimes
中是否有非零时间组件,如果没有则将其设置为所需的固定时间。
但是,无法使用此技术处理 INSERT 子句中时间部分显式设置为零的情况,因为 '2012-12-12'::timestamptz
等于 '2012-12-12 00:00:00'::timestamptz
。所以这就像试图区分 0.0 和 0.00。
从技术上讲,调整值应该发生在从字符串到列类型的隐式转换之前,即使是 RULE
(动态查询重写)也做不到。
在我看来,最好的选择是重写 INSERT 并对每个值应用一个函数,将它显式地从字符串转换为时间戳。此函数将测试输入格式并在需要时添加时间部分:
create function conv(text) returns timestamptz as $$
select case when length($1)=10 then ($1||' 15:45:10')::timestamptz
else $1::timestamptz end; $$
language sql strict immutable;
insert into foo values
(conv('2012-12-12')),
(conv(null)),
(conv('2012-12-12 12:12:12')),
(conv('2012-12-12 12:12'));
关于postgresql - 当仅提供 timestamptz 中的日期时强制执行默认时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11001758/
我们有一个类似于下面的结构: create table company ( id bigint not null, tz text not null ); create table c
我通过 Supabase.io 使用 PostgreSQL 13.3。我有一个表,其中有一个名为modified_at的字段,其类型为timestamptz: CREATE TABLE IF NOT
我通过 Supabase.io 使用 PostgreSQL 13.3。我有一个表,其中有一个名为modified_at的字段,其类型为timestamptz: CREATE TABLE IF NOT
我正在尝试使用 Postgres 函数 extract() 从 timestamptz 列中获取年份,但得到了意想不到的结果。我预计它会使用 UTC,但似乎使用系统的任何本地时区(在我的例子中是 ES
我正在对使用日期 (timestamptz) 用作光标的数据提要进行分页。提要由多种不同类型的帖子组成。 其中一个查询(简化)如下所示: SELECT a.id, a.title, E
我花了很多时间阅读有关在 Postgres 中处理时间戳的“最佳实践”,并且得到了很多相互矛盾的答案。使用 TIMESTAMPTZ 数据类型时,我假设 NOW() 和 NOW() 在时区 'utc'
假设我有表: postgres=# create table foo (datetimes timestamptz); CREATE TABLE postgres=# \d+ foo
Laravel 的 Schema Builder 中的 timestamps() 和 timestampsTz() 方法有什么区别?我尝试搜索谷歌,但找不到任何帮助。 最佳答案 基本上 timesta
Laravel 5.4 在迁移中支持 Postgres TIMESTAMP WITH TIME ZONE 字段类型: $table->timestampTz('scheduled_for'); Lar
如何将 UTC 格式的 timestamp 转换为 timestamptz? 如果我的本地时区是 GMT-1 并且我运行: 选择 '2017-01-01 00:00:00'::timestamptz
精简版 在 RDS 上部署了 Postgres 11.4。 是否有内置或直接的方法来拆分表中的行以进行批量更新? 一旦有了存储桶方案,如何在 SQL 中运行一个循环来处理每个存储桶,并稍稍暂停一下让服
我有一列a,它是一个timestamptz。另外,我有一列 b,它是一个 integer,表示要添加到 a 的秒数。我想要 a + b 的日期。 这是理想的方式吗? select a + (b::TE
我真的需要存储本地日期和时间(飞机轮子更新日期和时间)和 utc 偏移量,以便我可以转换为 utc 来计算间隔(飞行持续时间)。人们按本地时间旅行,您需要 utc 进行跨时区计算。我曾希望使用 tim
对于查询: SELECT '2018-03-01'::TIMESTAMP - '2018-09-01'::TIMESTAMP, '2018-03-01'::TIMESTAMPTZ - '
对于符合 ISO8601 标准的日期时间 2004-10-19 10:23:54+02 是否可以让具有 +02 偏移量的值反射(reflect)在存储的列值中,并在选择时也保留? 来 self 对 a
如何在日期时间按周进行分区:TIMESTAMPTZ。 我试过了 CREATE TABLE abc(time_stamp TIMESTAMPTZ NOT NULL) PARTITION BY EXTRA
这是一些示例代码 - 我相信它应该很简单,下面的代码与我在 web/stackoverflow 上找到的片段相同.. create table mydb (start timestamptz); in
我们在刚果的一个 PostgreSQL 11.4 部署使用了 CAT 时区(非洲/基加利 +02),并且在尝试将人工输入的时间戳转换为实际的 TIMESTAMPTZ 数据时我们的一个函数阻塞。 例如:
我将带时区的时间戳存储在我的 postgres 数据库中。服务器时区是 UTC。所有 timestamptzs 都存储为 UTC 日期时间。 现在,我想检索这些时间戳,但针对特定时区(例如美国/太平洋
我有一个表,其中包含一个 date 列和一个包含时区的 varchar 列。我想编写一个查询,以选择时区午夜日期在给定 timestamp with time zone 之前的所有行。 例如给定 CR
我是一名优秀的程序员,十分优秀!