С оговоркой, что это не серебряная пуля, я задаю этот вопрос и даю свой собственный ответ, поскольку после разумных усилий колледжа я обнаружил, что у меня нет решений для PostgreSQL.

В моем случае задача состоит в том, чтобы преобразовать набор предложений, состоящих в основном только из верхнего регистра, в разумное факсимиле абзаца, используя заглавные буквы только для первой буквы каждого предложения. Если это решение существует, то либо я слепой, либо оно было прилично хорошо спрятано.

Так, например, как мне преобразовать

THE NAME IS BOND. JAMES BOND. 007. AND THIS IS ONE COOL PIECE OF CODE.

К

The name is bond. James bond. 007. And this is one cool piece of code.

?

0
Wellspring 24 Мар 2021 в 17:24

1 ответ

Лучший ответ

Вот что я придумал. Буду рад наградить ответом на лучшее решение!

WITH fixed_sentences_source AS (
  WITH single_sentences_source AS (
    WITH arrays_source AS (
      SELECT
        regexp_split_to_array(LOWER('THE NAME IS BOND. JAMES BOND. 007. AND THIS IS ONE COOL PIECE OF CODE.'), '\. ' ) AS arrays
    )
    SELECT TRIM(UNNEST(arrays)) AS single_sentences
    FROM arrays_source
  )
  SELECT
      UPPER(SUBSTRING(single_sentences, 1, 1)) || SUBSTRING(single_sentences, 2, LENGTH(single_sentences) - 1) AS fixed_sentence
  FROM single_sentences_source
  WHERE
    single_sentences <> ''
)
SELECT ARRAY_TO_STRING(ARRAY(SELECT fixed_sentence FROM fixed_sentences_source), '. ')
2
Wellspring 24 Мар 2021 в 14:31