Ограничения проверьте db2, где имя пользователя может иметь только A-z или _ и определенную длину

Мне нужно написать ограничение в db2, где имя пользователя должно начинаться с@, за которым следует буквенно-цифровой шаблон, может иметь максимальную длину 31 и может содержать только строчные алфавиты, числа и символ _ (подчеркивание). Я сделал это:

ALTER  TABLE KUNDENKONTAKTDATEN ADD CONSTRAINT
  TwitterID_CHECK CHECK ( trim(length(TWITTER_ID)) <= 31 AND TWITTER_ID like '@%')

Моя проблема для части, содержащей только строчные алфавиты, цифры и _ .

Это мой домашний вопрос, и советы должны были использовать функции, такие как Trim, Translate, Length и Substr, но мне разрешено использовать другие функции. Интернет сказал мне использовать функцию FN: matches, но я не уверен, как это работает.

Может ли кто-нибудь помочь мне решить эту проблему с помощью или без использования FN:matches?

Заранее спасибо

Edit: на самом деле не дубликат этого, но подобный метод может быть применен, чтобы проверить, содержит ли он незаконное значение. Вопрос не только в том, состоит ли столбец из специальных символов. Часть моего вопроса уникальна: длина, начиная с, не найти, если он имеет специальный символ, но позволяя только один специальный символ ( _ ) в качестве значения и, следовательно, не дубликат.

1 ответ

  1. Наконец, это решило проблему.

    ALTER TABLE KUNDENKONTAKTDATEN
    ADD CONSTRAINT
    TwitterID_CHECK CHECK (trim(length(TWITTER_ID)) <= 31 AND TWITTER_ID LIKE '@%' 
    AND LENGTH(TRIM(TRANSLATE(TWITTER_ID, ' ',
    'abcdefghijklmnopqrstuvwxyz0123456789_@'))) = 0)
    

    Спасибо @Hogan and @mustaccio