【问题标题】:oracle sql query to get column values without spaceoracle sql查询以获取没有空格的列值
【发布时间】:2013-05-16 17:35:26
【问题描述】:

我正在尝试运行查询以从表中的列中选择值,该列中的数据在特定位置没有空间。即前两个位置。

Select test_col from A where SUBSTR(test_col, 0 ,2) <> ' '

到目前为止,它返回的列的开头两个位置有空格。

任何建议。

例子:

test_col
  Quick Brown Fox
Black Sheep
  This a test
Mary had a little lamb

所以查询应该返回 Black SheepMary 有一只小羊

【问题讨论】:

  • 您需要详细说明。您能否展示一些示例数据以及输出的样子?
  • 通过示例进行更新。
  • 设置sqlfiddle 也很有帮助。
  • test_colVARCHAR 还是 CHAR 列?

标签: sql oracle plsql


【解决方案1】:

您的索引应该从 1 而不是 0 开始,我更喜欢 Trim 并检查 null 而不是检查数据中的空间。试试这个

Select test_col from A where Trim(SUBSTR(test_col, 1 ,2)) IS NOT NULL

【讨论】:

    【解决方案2】:

    Oracle 10g 及更高版本:

    SELECT test_col FROM a WHERE REGEXP_LIKE(test_col, '^[^ ]{2}.*$'); 
    

    这里是SQL Fiddle

    【讨论】:

    • 感谢它给出了无效关系运算符 ora-00920 的错误
    • 很抱歉。应该测试过了给我一些,我会解决的。
    • 感谢它现在可以使用。正确答案不止一个。由于您提供了 sql fiddle。所以我接受你的回答。感谢每一个人的帮助和时间。
    【解决方案3】:
    select test_col 
      from A 
     where SUBSTR(test_col, 1, 1) <> ' '
       and SUBSTR(test_col, 2, 1) <> ' ';
    

    或者(甚至更好)

    select test_col 
      from A 
     where INSTR(SUBSTR(test_col, 1, 2), ' ') = 0;
    

    【讨论】:

      【解决方案4】:

      字符串的第一个位置索引是 1,而不是 0(尽管 SUBSTR() treats it as 1)并且您只是在测试 一个 空间:

      select test_col from A where SUBSTR(test_col, 1, 2) <> '  '
      

      【讨论】:

      • 我之前尝试过使用索引 (1,2) 它返回在这两个位置有空格的数据。
      • 您正在检查 one 空间,虽然@Nomad,而不是 two
      • 你是对的,谢谢。但如果我将索引更改为 1,3 而不是 1,2 等,结果相同。
      • 感谢 Ben 的回答和帮助。
      • 当然@Nomad,如果你要测试3个空格,你必须检查它是否不等于3个空格!
      猜你喜欢
      • 2012-02-03
      • 2011-02-14
      • 1970-01-01
      • 2021-12-26
      • 2017-09-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多