如果为空,则返回替代值?
Returning alternative value if null?
你好,我用的是postgres 12,学习了几天了。
我想知道是否可以写入 CREATE TABLE 阶段:IF column_x is NULL, return 'alternative value'
?
这是我现在的 table:
CREATE OR REPLACE FUNCTION update_modified_column()
RETURNS TRIGGER AS $$
BEGIN
NEW.modified = NOW();
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TABLE example (
id BIGSERIAL NOT NULL PRIMARY KEY,
entry_name VARCHAR(150) NOT NULL UNIQUE,
about VARCHAR(1500),
org_type VARCHAR(150),
category VARCHAR(150),
sub_categories VARCHAR(300),
website_link VARCHAR(300) UNIQUE,
membership VARCHAR(100),
instagram VARCHAR(150) UNIQUE,
twitter VARCHAR(150) UNIQUE,
link_lists VARCHAR(100) UNIQUE,
facebook VARCHAR(200) UNIQUE,
youtube VARCHAR(200) UNIQUE,
podcast VARCHAR(200) UNIQUE,
tags VARCHAR(150),
created TIMESTAMPTZ NOT NULL DEFAULT NOW(),
modified TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE TRIGGER set_timestamp BEFORE UPDATE ON bbdb FOR EACH ROW EXECUTE PROCEDURE update_modified_column();
所以在这种情况下,我希望 'about' 和 'website_link' 中的任何空条目都说 'Coming soon',而所有社交媒体空条目只说 'None'.我想我的 UNIQUE 约束不允许这样做? (我让他们避免条目重复,以防 'entry_name' 提交有变体)。
感谢您的帮助。
当您将所有这些列定义为 UNIQUE
时,您可以有多个 null
值,但不能有两行具有相同的 'Coming soon'
值。
但是您可以在检索期间用所需的替换替换那些 NULL 值:
select id,
coalesce(website_link, 'Coming Soon') as website_link,
coalesce(about, 'Coming soon') as about,
coalesce(twitter, 'None') as twitter,
coalesce(instgram, 'None') as instagram
from the_table;
如果您不想每次都输入该内容,请创建一个视图来为您完成。
你好,我用的是postgres 12,学习了几天了。
我想知道是否可以写入 CREATE TABLE 阶段:IF column_x is NULL, return 'alternative value'
?
这是我现在的 table:
CREATE OR REPLACE FUNCTION update_modified_column()
RETURNS TRIGGER AS $$
BEGIN
NEW.modified = NOW();
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TABLE example (
id BIGSERIAL NOT NULL PRIMARY KEY,
entry_name VARCHAR(150) NOT NULL UNIQUE,
about VARCHAR(1500),
org_type VARCHAR(150),
category VARCHAR(150),
sub_categories VARCHAR(300),
website_link VARCHAR(300) UNIQUE,
membership VARCHAR(100),
instagram VARCHAR(150) UNIQUE,
twitter VARCHAR(150) UNIQUE,
link_lists VARCHAR(100) UNIQUE,
facebook VARCHAR(200) UNIQUE,
youtube VARCHAR(200) UNIQUE,
podcast VARCHAR(200) UNIQUE,
tags VARCHAR(150),
created TIMESTAMPTZ NOT NULL DEFAULT NOW(),
modified TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE TRIGGER set_timestamp BEFORE UPDATE ON bbdb FOR EACH ROW EXECUTE PROCEDURE update_modified_column();
所以在这种情况下,我希望 'about' 和 'website_link' 中的任何空条目都说 'Coming soon',而所有社交媒体空条目只说 'None'.我想我的 UNIQUE 约束不允许这样做? (我让他们避免条目重复,以防 'entry_name' 提交有变体)。
感谢您的帮助。
当您将所有这些列定义为 UNIQUE
时,您可以有多个 null
值,但不能有两行具有相同的 'Coming soon'
值。
但是您可以在检索期间用所需的替换替换那些 NULL 值:
select id,
coalesce(website_link, 'Coming Soon') as website_link,
coalesce(about, 'Coming soon') as about,
coalesce(twitter, 'None') as twitter,
coalesce(instgram, 'None') as instagram
from the_table;
如果您不想每次都输入该内容,请创建一个视图来为您完成。