2

PostgreSQL クエリは次のとおりです。

SELECT * 
FROM rates 
WHERE prefix = (SELECT max(prefix) 
                FROM rates 
                where '914428215151' ~* ('^'||prefix));

MySQL がクラップアウトします~*

MySQLに相当するものは何ですか?

4

2 に答える 2

4

MySQL はRLIKEorREGEXPを正規表現の比較演算子として使用します。

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() 値を返します。

于 2013-10-08T18:28:32.677 に答える
0

where 句には単純な LIKE を使用します。

SELECT max(prefix) FROM rates where prefix LIKE '914428215151%'
于 2013-10-08T18:30:40.683 に答える