Sql 条件值

Sql 条件值,sql,postgresql,Sql,Postgresql,我有一个使用UUID作为主键的表。像这样插入新行 INSERT INTO a ( id, ... ) VALUES ( uuid_generate_v4(), ...) 现在,我实际上只想在插入中没有提供ID时生成UUID(无论是NULL还是空字符串) 有可能写这样的东西吗 INSERT INTO a ( id, ... ) VALUES ( $1 || uuid_generate_v4(), ...) 检查一些RDBMS中可用的IF函数 IF( $1 = NULL, $1, uuid_ge

我有一个使用UUID作为主键的表。像这样插入新行

INSERT INTO a ( id, ... ) VALUES ( uuid_generate_v4(), ...)
现在,我实际上只想在插入中没有提供ID时生成UUID(无论是
NULL
还是空字符串)

有可能写这样的东西吗

INSERT INTO a ( id, ... ) VALUES ( $1 || uuid_generate_v4(), ...)

检查一些RDBMS中可用的IF函数

IF( $1 = NULL, $1, uuid_generate_v4())
$1
作为占位符

如果你喜欢的话,你也可以设置一个触发点,但大多数情况下,他们都是不受欢迎的

还有
IFNULL($1,uuid\u generate\u v4())

更新:我很惊讶PostgreSQL不支持我认为标准的
IF


因此,正如其他答案中提到的,
COALESCE($1,uuid_generate_v4())
可能是最好的选择。

检查一些RDBMS中可用的IF函数

IF( $1 = NULL, $1, uuid_generate_v4())
$1
作为占位符

如果你喜欢的话,你也可以设置一个触发点,但大多数情况下,他们都是不受欢迎的

还有
IFNULL($1,uuid\u generate\u v4())

更新:我很惊讶PostgreSQL不支持我认为标准的
IF

因此,正如其他答案中提到的,
COALESCE($1,uuid\u generate\u v4())
可能是最好的选择。

将使用第一个非空值。如果$1为空,则coalesce()将使用uuid_generate_v4()。否则,它将尝试使用$1

insert into a (id, ... ) values 
(coalesce($1, uuid_generate_v4()), ... );
将使用第一个非null。如果$1为空,则coalesce()将使用uuid_generate_v4()。否则,它将尝试使用$1

insert into a (id, ... ) values 
(coalesce($1, uuid_generate_v4()), ... );

您可以更改该表或使用列的默认值创建该表

CREATE TABLE thing (
  id uuid DEFAULT uuid_generate_v4(),
  updated timestamp DEFAULT now()
);

您可以更改该表或使用列的默认值创建该表

CREATE TABLE thing (
  id uuid DEFAULT uuid_generate_v4(),
  updated timestamp DEFAULT now()
);

我必须为此修改准备好的语句,所以这不是一个选项。这正是默认值的用途。它们保证列永远不会有空值。insert语句变成insert INTO a(…)VALUES(…)是的,我知道,不幸的是,在我的例子中,我无法更改模式,所以就是这样。这就是为什么我要求按函数/op进行检查。我必须为此修改准备好的语句,所以这不是一个选项。这正是默认值的用途。它们保证列永远不会有空值。insert语句变成insert INTO a(…)VALUES(…)是的,我知道,不幸的是,在我的例子中,我无法更改模式,所以就是这样。这就是为什么我要求按函数/op进行检查。我打算建议使用
isnull()
函数,但我发现Postgres没有这个函数;所以改用
coalesce()
,我本来打算建议使用
isnull()
函数,但我发现Postgres没有这个函数;所以用
coalesce()
来代替。大多数?除了MySQL和MS Access之外,还有其他dbms支持IF()函数吗?大多数?除了MySQL和MS Access之外,还有其他dbms支持IF()函数吗?