SQL Query在短划线之前显示字符串

时间:2013-09-13 09:13:11

标签: sql oracle

我想执行一个只在特定字段中显示破折号之前的所有字符串的查询。

例如:

原始数据:AB-123

查询后:AB

3 个答案:

答案 0 :(得分:3)

您可以使用substr

SQL> WITH DATA AS (SELECT 'AB-123' txt FROM dual)
  2  SELECT substr(txt, 1, instr(txt, '-') - 1)
  3    FROM DATA;

SUBSTR(TXT,1,INSTR(TXT,'-')-1)
------------------------------
AB

regexp_substr(10g +):

SQL> WITH DATA AS (SELECT 'AB-123' txt FROM dual)
  2  SELECT regexp_substr(txt, '^[^-]*')
  3    FROM DATA;

REGEXP_SUBSTR(TXT,'^[^-]*')
---------------------------
AB

答案 1 :(得分:0)

您可以使用regexp_replace

例如

    WITH DATA AS (
         SELECT 'AB-123' as text FROM dual
         UNION ALL
         SELECT 'ABC123' as text FROM dual
    )
    SELECT 
        regexp_replace(d.text, '-.*$', '') as result
    FROM DATA d;

将导致

    WITH DATA AS (
      2      SELECT 'AB-123' as text FROM dual
      3      UNION ALL
      4      SELECT 'ABC123' as text FROM dual
      5  )
      6  SELECT
      7     regexp_replace(d.text, '-.*$', '') as result
      8  FROM DATA d;

    RESULT
    ------------------------------------------------------
    AB
    ABC123

答案 2 :(得分:0)

我发现这很简单

 SELECT distinct
        regexp_replace(d.pyid, '-.*$', '') as result
    FROM schema.table d;

pyID列包含ABC-123,DEF-3454

SQL结果:

ABC DEF