在sql oracle查询中修剪空格

时间:2014-05-05 21:40:17

标签: oracle

SELECT   MT940_INFLOW.SEQ_NO, MT940_INFLOW.VALUE_DATE, MT940_INFLOW.POST_DATE, MT940_INFLOW.AMOUNT, MT940_INFLOW.DR_CR, MT940_INFLOW.REFERENCE, MT940_INFLOW.TRXN_TYPE, MT103_INFLOW.REFERENCE AS EXPR1, MT103_INFLOW.BENEFICIARY_CUSTOMER, MT103_INFLOW.RECEIVER_INFORMATION

FROM     MT940_INFLOW, MT103_INFLOW

WHERE    MT940_INFLOW.REFERENCE = MT103_INFLOW.REFERENCE

正在加入2个oracle表,如上面的查询中所示。我的问题是表MT103_INFLOW上的Reference列,返回空格>如何修改我的查询以在引用结束时去除空白的MT103_INFLOW的引用列。

2 个答案:

答案 0 :(得分:1)

使用trim功能:

SELECT trim(MT940_INFLOW.REFERENCE) AS REFERENCE, ....
WHERE    trim(MT940_INFLOW.REFERENCE) = trim(MT103_INFLOW.REFERENCE)

注意我添加了一个别名,因此结果中的字段仍会被调用REFERENCE,但此别名不能用于WHERE子句。

另外,我认为最好在存储引用时过滤掉空格,特别是在你的情况下,因为你也使用引用进行过滤。在过滤器中使用trim等函数时,会阻止Oracle使用该列上的任何索引,因此最终查询速度会变慢。因此,在存储空间时,最好从场中修剪空间。

要更新现有数据,您可以执行以下操作:

UPDATE MT940_INFLOW
SET REFERENCE = trim(REFERENCE);

当您修复输入和现有数据时,可以从SELECT查询中删除修剪函数,它将变得更有效。

答案 1 :(得分:0)

SELECT A.SEQ_NO, A.VALUE_DATE, A.POST_DATE, A.AMOUNT, A.DR_CR, REPLACE(A.REFERENCE,CHR(13)),
A.TRXN_TYPE, B.* FROM MT940_INFLOW A 
INNER JOIN MT103_INFLOW B 
ON A.REFERENCE = REPLACE(B.REFERENCE,CHR(13))

在进一步调查中,我注意到它更像是一个额外的行,而不是空格,所以我修改了我的查询,如上所示,它工作正常。