【问题标题】:Oracle -- finding values with leading or trailing spacesOracle -- 查找带有前导或尾随空格的值
【发布时间】:2010-07-11 13:34:46
【问题描述】:

我正在尝试查找某个列是否需要 TRIM 函数。

如何确定表中的该列是否有在实际数据之前或之后有空格的记录。

【问题讨论】:

  • 你的意思是“空白”还是“空格”?前者包括标签,而接受的答案将无法处理。

标签: sql oracle


【解决方案1】:

那么为什么你不能使用以下来查找前导空格?我已经能够以这种方式识别带有前导空格的记录,并使用 '% ' 来查找尾随空格。

SELECT mycolumn
FROM my_table
WHERE mycolumn LIKE ' %'

我还使用以下内容删除了前导和尾随空格

Update My_table set Mycolumn = TRIM(Mycolumn) 

这似乎工作得很好。

【讨论】:

    【解决方案2】:

    一种快速而肮脏的方式

    WHERE LENGTH(TRIM(COL1)) <> LENGTH(COL1)
    

    【讨论】:

      【解决方案3】:

      您可以使用TRIM 函数本身检查它,不是最有效但准确的:

      Select *
      From TableA
      Where MyColumn <> TRIM(MyColumn)
      

      虽然如果你检查然后转身修剪,你可能只想一开始就这样做,像这样:

      Select TRIM(MyColumn) as TrimmedMyColumn
      From TableA
      

      【讨论】:

      • 是的,这行得通。但要意识到这意味着每个查询都是全表扫描。如果进行大量查询,请考虑将数据更新为没有空格。
      • @bwawok - +1 - 如果您总是这样使用它,最好将其作为一次时间成本并进行更新,在这种情况下不确定 OP 的情况。
      • @bwawok -- 或快速全索引扫描。
      【解决方案4】:
      select data1, length(data1)-length(replace(data1,' ','')) from t;
      

      【讨论】:

        【解决方案5】:

        当 T$DSCA 表字段之一在末尾有尾随空格时,以下查询将检索行: SELECT * from TABLE_NAME A WHERE RAWTOHEX(SUBSTR(A.T$DSCA, LENGTH(T$DSCA),1)) ='A0' AND TRIM(T$DSCA) 不为空;

        【讨论】:

        • 考虑描述您的解决方案,而不是“这是代码,再见。”
        • 欢迎来到 Stack Overflow!尽管此代码可能有助于解决问题,但它并没有解释 为什么 和/或 如何 回答问题。提供这种额外的背景将显着提高其长期教育价值。请edit您的答案添加解释,包括适用的限制和假设。
        【解决方案6】:

        您可以在 Oracle 中使用 regular expressions

        例子:

        select * from your_table 
         where regexp_like(your_column, '^[ ]+.*')
            or regexp_like(your_column, '.*[ ]+$')
        

        【讨论】:

        • 您的示例不需要正则表达式 - 它只是 your_column LIKE ' %' OR your_column LIKE '% ' 我认为正则表达式需要是 ^[\s]+.* 以匹配所有空格
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-06-27
        • 2018-01-25
        • 2019-12-16
        • 2015-08-09
        • 1970-01-01
        • 1970-01-01
        • 2019-02-02
        相关资源
        最近更新 更多