PostgreSQL クエリは次のとおりです。
SELECT *
FROM rates
WHERE prefix = (SELECT max(prefix)
FROM rates
where '914428215151' ~* ('^'||prefix));
MySQL がクラップアウトします~*
MySQLに相当するものは何ですか?
PostgreSQL クエリは次のとおりです。
SELECT *
FROM rates
WHERE prefix = (SELECT max(prefix)
FROM rates
where '914428215151' ~* ('^'||prefix));
MySQL がクラップアウトします~*
MySQLに相当するものは何ですか?
MySQL はRLIKE
orREGEXP
を正規表現の比較演算子として使用します。
http://dev.mysql.com/doc/refman/5.6/en/regexp.html#operator_regexpを参照してください。
PostgreSQL の~*
演算子は大文字と小文字を区別しません。MySQL も同様です。
REGEXP
バイナリ文字列で使用する場合を除き、大文字と小文字は区別されません。
もう 1 つの違いは、||
文字列連結演算子としての の使用です。場合は、MySQL にその演算子を同じ方法で使用させることができますSET SQL_MODE=PIPES_AS_CONCAT
が、デフォルトでは論理「or」演算子であるため、次のCONCAT()
関数を使用する必要があります。
例:
SELECT * FROM rates WHERE prefix = (
SELECT MAX(prefix) FROM rates
WHERE '914428215151' REGEXP CONCAT('^', prefix));
あなたのコメントについて:
||
文字列連結として使用しないでください。機能を使用してくださいCONCAT()
。
を使用する場合||
は、論理的な「または」です。の結果('^' OR prefix)
はtrueで、MySQL では数字の 1 で表されます。正規表現の比較'914428215151' REGEXP '1'
は明らかに任意の値と一致するため、表の MAX() 値を返します。
where 句には単純な LIKE を使用します。
SELECT max(prefix) FROM rates where prefix LIKE '914428215151%'