2016-11-28 1 views
0

PostgreSQL에 테스트 테이블이 있습니다. 필드 value_exist는 문자열이지만 값과 영숫자 값이 있으며 데이터의 일부 특수 문자가 있습니다. [/ alpha /?/$/encoding /.] 문자를 무시하고 레코드에 숫자 만 있는지 확인하고 싶습니다. 유일한 숫자라면 영숫자에 대해 숫자 만 필요합니다. null이 필요합니다. 아래의 예를 참조하십시오 숫자 레코드에서 숫자를 추출하고 PostgreSQL에서 영숫자로 null을 전달하십시오.

enter image description here

나는 아래의 코드를 시도를하지만 나에게 원하는 출력 제공하지 않습니다

SELECT CASE WHEN value_exist ~ '^([$?\\*+-][0-9]|[0-9][$?\\*+-]|[0-9][0-9])$' 
       THEN REGEXP_REPLACE(value_exist, '[$?\\*+-]', '', 'g') 
       ELSE NULL END value_new 
    FROM test_table 
+0

숫자 레코드에서 0부터 9까지의 정확한 숫자 만 필요합니다. 나머지는 모두 null로 전달 된 나머지 (특수 문자/영숫자)입니다. – user1538020

+0

질문을 명확히하십시오. '[/ alpha /?/$/encoding /.]은 무엇입니까? 정수 또는 부동 소수점 숫자? 기호 유무에 관계없이? In은 결과가 숫자 또는 'NULL'일 수 있음을 정확히 이해합니까? –

+0

알파 - 알파벳, $ - 특수 문자, 인코딩은 테이블에있는 모든 문자가 될 수 있습니다. 나는 다음을 시도했다 : 영숫자 : SELECT ('kk9'~ '([az AZ])'then null else 77 end) K. 그러나 "$ 99 $"를 확인하고 싶다. null하지만 null을 제공하지 않습니다. 그래서 $를 처리 할 수 ​​없습니다. – user1538020

답변

0

나는이 테스트를하고이 작품 .. 그것은 단지 숫자 소요 우리가 숫자를 포함한 숫자가 아닌 다른 값을 얻으면 null로 넘깁니다.

select case when 'H44$'~'^[0-9]*$' then 88 
else null end ---- Result -> null 

select case when '44'~'^[0-9]*$' then 88 
else null end ---- Result -> 44 
0
SELECT nullif(
      regexp_replace(
      value_exist, 
      E'^.*[^\\d].*$', 
      'x'), 
      'x') 
FROM test_table; 
+0

위의 작업을하지 못했습니다 : ( – user1538020

+0

설명 해주십시오 * 작동하지 않음 *. –

+0

SELECT nullif ( REGEXP_REPLACE ( '44', '^. *^\ D * $.' ') 'g '); test_table FROM는 ->이 (내게 널 – user1538020

관련 문제