Oracle中char类型列查询时,无需trim或改varchar如何获取无空格填充值?
解决方案
针对Oracle CHAR类型列自动补空格的问题,无需手动写TRIM或修改列类型的方案有两种:
1. 创建虚拟列
在原表中添加一个基于原列自动去除尾部空格的虚拟列,后续查询该虚拟列即可直接获取无空格的值:
ALTER TABLE mytable ADD value_clean GENERATED ALWAYS AS (TRIM(value)) VIRTUAL;
查询时直接使用虚拟列:
SELECT value_clean FROM mytable WHERE id = 1;
虚拟列不会占用额外存储空间,Oracle会在查询时自动计算对应值。
2. 创建视图
创建一个包含处理后列的视图,通过查询视图来获取无空格的数据:
CREATE VIEW v_mytable AS SELECT id, TRIM(value) AS value FROM mytable;
之后直接查询视图即可:
SELECT value FROM v_mytable WHERE id = 1;
这种方式不需要修改原表结构,适合无法对原表进行变更的场景。
补充说明:如果仅需在查询条件中匹配值时忽略尾部空格(而非返回值去空格),可以设置会话级参数:
ALTER SESSION SET NLS_COMP=ANSI; ALTER SESSION SET NLS_SORT=BINARY_CI;
设置后WHERE value = 'Test'会自动匹配带空格的CHAR值,但查询返回的value列仍会包含尾部空格,仅适用于条件匹配场景。
内容的提问来源于stack exchange,提问作者Sina Askarnejad
相关产品推荐
相关产品推荐

