0

会社の顧客の Excel シートでデータを除外しようとしています。必要な 3 つのフィールドはFIRST_NAMELAST_NAME、およびCOMPANY_NAMEです。

ルールは次のとおりです。

  • FIRST_NAMEANDであるLAST_NAME必要がありNOTますNULL
  • FIRST_NAMEANDLAST_NAMEはアルファベットのみである必要があります
  • 上記のルールは関係ありません IFCOMPANY_NAMENOT NULL

したがって、明確にするために繰り返します..顧客はFIRST_NAMEANDを持っている必要があります (一方またはLAST_NAME両方が欠けていることはできませんCOMPANY_NAME) 。FIRST_NAMELAST_NAME

データの例と、それらがデータにとどまる必要があるかどうかを次に示します。

FIRST_NAME | LAST_NAME | COMPANY_NAME |         Good customer?
-----------|-----------|--------------|--------------------------------
   Alex    |  Goodman  |    AG Inc.   | Yes - All are filled out
   John    |  Awesome  |              | Yes - First and last are fine
   Cindy   |           |  Cindy Corp. | Yes - Company is filled out
           |           |   Blank Spa  | Yes - Company is filled out
           |           |              | No - Nothing is filled out
  Gordon   |  Mang#2   |              | No - Last contains non-alphabet
  Jesse#5  |  Levvitt  |    JL Inc.   | Yes - Company is filled out
  Holly    |           |              | No - No last or company names

SELECTクエリは次のとおりです (句の一部のフィールドが削除されています)。

SELECT VR_CUSTOMERS.CUSTOMER_ID, VR_CUSTOMERS.FIRST_NAME, VR_CUSTOMERS.LAST_NAME, VR_CUSTOMERS.COMPANY_NAME, ...
FROM DEV.VR_CUSTOMERS VR_CUSTOMERS
WHERE (
LENGTH(NAME)>4 AND
(UPPER(NAME) NOT LIKE UPPER('%delete%')) AND
(COMPANY_NAME IS NOT NULL OR (COMPANY_NAME IS NULL AND FIRST_NAME IS NOT NULL AND LAST_NAME IS NOT NULL AND FIRST_NAME LIKE '%^[A-z]+$%' AND LAST_NAME LIKE '%^[A-z]+$%'))
)

の正規表現も試しました'%[^a-z]%'。の代わりにRLIKEandを試してみましたが、どちらも機能していないようです。REGEXPLIKE

上記のクエリでは、結果にはCOMPANY_NAME.

4

2 に答える 2

2

REGEXP_LIKEおよび正規表現を使用して問題を修正しました^[A-z]+$

この修正後のWHERE句は次のとおりです。

WHERE (
LENGTH(NAME)>4 AND
(UPPER(NAME) NOT LIKE UPPER('%delete%')) AND
(COMPANY_NAME IS NOT NULL OR (COMPANY_NAME IS NULL AND REGEXP_LIKE(FIRST_NAME, '^[A-z]+$') AND REGEXP_LIKE(LAST_NAME, '^[A-z]+$')))
)
于 2016-12-16T17:33:43.723 に答える
0

It appears you're using MySQL given your mention of RLIKE and REGEXP. In that case, try this WHERE clause, that uses the regular expression character class 'alpha':

WHERE 
      COMPANY_NAME is not null    -- COMPANY_NAME being present is the higher priority pass condition 
  or  ( -- but if COMPANY_NAME is not present, then the following conditions must be satisfied 
           FIRST_NAME is not null 
       and FIRST_NAME REGEXP '[[:alpha:]]+' 
       and LAST_NAME is not null 
       and LAST_NAME REGEXP '[[:alpha:]]+' 
      ) 

Bear in mind that the not null check is redundant given the regular expression, so the WHERE clause would simplify itself to:

WHERE 
      COMPANY_NAME is not null    -- COMPANY_NAME being present is the higher priority pass condition 
  or  ( -- but if COMPANY_NAME is not present, then the following conditions must be satisfied 
           FIRST_NAME REGEXP '[[:alpha:]]+' 
       and LAST_NAME REGEXP '[[:alpha:]]+' 
      ) 
于 2016-12-15T18:53:31.580 に答える