我有这个INSERT语句,acct_desc
字段的末尾似乎有尾随空格。我想知道如何防止在insert语句中出现尾随空格。
INSERT INTO dwh.attribution_summary
SELECT d.adic,
d.ucic,
b.acct_type_desc as acct_desc,
a.begin_mo_balance as opening_balance,
c.date,
'fic' as userid
FROM fic.dim_members d
JOIN fic.fact_deposits a ON d.ucic = a.ucic
JOIN fic.dim_date c ON a.date_id = c.date_id
JOIN fic.dim_acct_type b ON a.acct_type_id = b.acct_type_id
WHERE c.date::timestamp = current_date - INTERVAL '1 days';
答案 0 :(得分:5)
使用PostgreSQL trim()
功能
有trim()
, rtrim()
and ltrim()
。
修剪尾随空格:
...
rtrim(b.acct_type_desc) as acct_desc,
...
如果acct_type_desc
不是text
or varchar
类型,请先将其转换为文字:
...
rtrim(b.acct_type_desc::text) as acct_desc,
...
如果acct_type_desc
的类型为char(n)
,则将其强制转换为文本会自动删除尾随空格,不需要trim()
。
答案 1 :(得分:3)
acct_desc
的类型是什么?
答案 2 :(得分:0)
除了其他人说的话,在该列中添加CHECK CONSTRAINT
,因此,如果忘记了在INSERT语句中传递rtrim()
函数,则检查约束不会。
例如,检查字符串的结尾空格(末尾):
ALTER TABLE dwh.attribution_summary
ADD CONSTRAINT tcc_attribution_summary_trim
CHECK (rtrim(acct_type_desc) = acct_type_desc);
另一个示例,检查前导和尾随空格以及字符串中间的连续空白):
ALTER TABLE dwh.attribution_summary
ADD CONSTRAINT tcc_attribution_summary_whitespace
CHECK (btrim(regexp_replace(acct_type_desc, '\s+'::text, ' '::text, 'g'::text)) = acct_type_desc);