Разделить буквенно-цифровую строку с помощью presto - PullRequest
0 голосов
/ 17 октября 2019

Я использую Presto SQL для разделения буквенно-цифровой строки, которая выглядит следующим образом: AB1234CD - AB1234, JA4567EF.8 - JA4567

Я пытаюсь удалить алфавиты и все, что находится после алфавитов в конце строки.

Ответы [ 2 ]

1 голос
/ 17 октября 2019

На основе предоставленных вами примеров вы хотите сохранить

  • начальные буквы
  • цифры после начальных букв

, отбрасывая все впоследствии.

Для этого regexp_extract идеально подходит.

presto:default> SELECT regexp_extract('AB1234CD', '^[a-zA-Z]*[0-9]*');
 _col0
--------
 AB1234
(1 row)

(проверено на Presto 322)

0 голосов
/ 19 октября 2019

После просмотра примеров и запросов возможны два варианта решения:

  1. Извлечение строки, начинающейся с алфавита и сопровождаемой цифрами
  2. Извлечение строки из шести длин.

Следующая часть запроса используется для генерации тестовых данных, вы можете заменить их на ваш запрос select.

  WITH dataset AS (
  SELECT CAST(ROW('ABC12345DE') AS ROW(id VARCHAR)) AS data)

Для первого решения есть две возможности либо извлечь первыйвхождение или извлечение всех возможных строк:

извлечение первой возможной строки

  with dataset AS (
  SELECT CAST(ROW('AB1234CDE') AS ROW(id VARCHAR)) AS data) 
  SELECT regexp_extract(data.id,'[a-zA-Z]*[1-9]*') AS str from dataset

извлечение всех возможных строк

  with dataset AS (
  SELECT CAST(ROW('AB1234CDE123') AS ROW(id VARCHAR)) AS data) 
  SELECT regexp_extract_all(data.id,'[a-zA-Z]*[1-9]*') AS str from dataset

для второго решения:

Извлечение 6 длина строки

  with dataset AS (
  SELECT CAST(ROW('AB1234CDE') AS ROW(id VARCHAR)) AS data )
  select substr(data.id, 1, 6)  as str from dataset
...