Sql 条件值
我有一个使用UUID作为主键的表。像这样插入新行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
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()函数吗?