programing

ms-access NZ를 IFNULL MySQL 또는 MariaDB 함수로 변환하려면 어떻게 해야 합니까?

bestcode 2022. 9. 16. 00:00
반응형

ms-access NZ를 IFNULL MySQL 또는 MariaDB 함수로 변환하려면 어떻게 해야 합니까?

ms-access에서 regex 기반 MySQL 또는 MariaDB SQL에 대한 SQL 쿼리의 "translator"를 sed와 함께 씁니다.

문제는 nz 함수로 두 가지 형태가 있습니다.

     access          MariaDB or MySQL
nz(expr1,expr2) --> ifnull(expr1,expr2)
nz(expr)        --> ifnull(expr,0)

각 케이스에 대해 다음 두 가지 조건이 있지만 두 가지 모두에 대해 하나만 있는 것은 아닙니다.

sed -E 's/nz\((.*),(.*)\)/ifnull\(\1,\2\)/gi'
sed -E 's/nz\((.*)\)/ifnull\(\1,0\)/gi'

둘 다 하나의 침전물에 어떻게 결합하는지 아세요?아니면 다른 툴을 tr, awk 또는 perl로 사용할 수도 있습니다.

갱신하다

이 입력의 경우:

SELECT nz(column1),nz(column2,4),column3 FROM table;

바람직한 출력은 다음과 같습니다.

SELECT ifnull(column1,0),ifnull(column2,4),column3 FROM table;

한 가지 옵션은 2개의 캡처 그룹이 포함된 패턴을 사용하는 것입니다. 여기서 두 번째 그룹은 선택 사항입니다.그런 다음 정의된 perl을 사용하여 조건부 치환을 수행할 수 있습니다.

양식

nz\(([^,()]+)(,[^,()]+)?\)

설명.

  • nz\(경기nz(
  • (그룹 1을 캡처하다
    • [^,()]+ 부정 문자 클래스, 1+ 곱하기 임의의 문자(제외), ( )
  • )그룹 1을 닫습니다.
  • (그룹 2를 캡처하다
    • ,[^,()]+경기,를 제외하고 임의의 문자를 1+배 이상 일치시킵니다., ( )
  • )?그룹 2를 닫고 옵션으로 설정
  • \)경기)

Regex 데모 | Perl 데모

코드 예시

my $str = "SELECT nz(1), nz(2,3), column FROM table;";
$str =~ s/nz\(([^,()]+)(,[^,()]+)?\)/defined($2) ? "ifnull(" . $1.$2 . ")":"ifnull(" . $1 . ", 0)"/ge;
print $str
  • s///치환에 사용되다
  • /e평가 수식자
  • /g글로벌 수식자

산출량

SELECT ifnull(1, 0), ifnull(2,3), column FROM table;

언급URL : https://stackoverflow.com/questions/61415745/how-can-i-translate-ms-access-nz-to-ifnull-mysql-or-mariadb-functions

반응형