네, 성 가시지만 가능합니다. 다음과 같이 보입니다 :
check ((col regexp_matches '^[0-9]{9}$) and
(case when (substring(col, 1, 1) * 9 + substring(col, 2, 1) * 8 + substring(col, 3, 1) * 7 +
substring(col, 4, 1) * 6 + substring(col, 5, 1) * 5 + substring(col, 6, 1) * 4 +
substring(col, 7, 1) * 3 + substring(col, 8, 1) * 2
) % 11 = 0 or
(substring(col, 1, 1) * 9 + substring(col, 2, 1) * 8 + substring(col, 3, 1) * 7 +
substring(col, 4, 1) * 6 + substring(col, 5, 1) * 5 + substring(col, 6, 1) * 4 +
substring(col, 7, 1) * 3 + substring(col, 8, 1) * 2
) = 1
then 0
else 11 -
((substring(col, 1, 1) * 9 + substring(col, 2, 1) * 8 + substring(col, 3, 1) * 7 +
substring(col, 4, 1) * 6 + substring(col, 5, 1) * 5 + substring(col, 6, 1) * 4 +
substring(col, 7, 1) * 3 + substring(col, 8, 1) * 2
) % 11
)
end) = substring(col, 9, 1) + 0
)
개인적으로 필자는이를 함수에 캡슐화하고 함수를 대신 사용합니다.
불쾌한 더미 문자열 대신에 PL/pgSQL 함수 (영어 요구 사항의 음역에 가까운)를 사용해야하는 이유는 무엇입니까? –
이 답변은 잘 작동하는 것 같습니다. 감사합니다. 변수에 반복 된 연산을 저장하여 과도한 코드 라인을 피할 수 있습니까? 죄송합니다 내 sql 지식을 비트 녹이지만 일부 값을 저장하는 rembember – galseth
PL/pgSQL 함수를 더 좋을 것이라고하지만 내가 새로운 값을 추가하고 유연한 SQL 쿼리를 오른쪽으로 추가 할 필요가 때 기능을 사용하도록 강요 할 것이라고? 아니면 방금 "선택 함수()"를 호출하고 사실을 반환 확인 트리거/제약 조건을 만들 수 있습니까? – galseth