2017-02-03 1 views
1

私はユーザー名のクエリ検索をしたい、ユーザー名はbase64でエンコードされます どのように私はクエリを行うことができますか?postgresql - ユーザ名がbase64でエンコードされているときにクエリを検索する方法は?

私はこれを試して、すでに試してください。

select CONVERT_FROM(DECODE(username, 'BASE64'), 'UTF-8'),language from cmsusers where CONVERT_FROM like '%c%'; 

をしかし、それはこのようにショーのエラーです:私がしようとすると、

LINE 1: ... 'BASE64'), 'UTF-8'),language from cmsusers where CONVERT_FR... 

この:

select CONVERT_FROM(DECODE(username, 'BASE64'), 'UTF-8'),language from cmsusers; 

それが仕事だし、すべてのユーザ名をデコードますこれを示す:

convert_from | language 
--------------+---------- 
admin  | EN 
Indomaret | EN 
7seven  | EN 
Alfamart  | EN 
CircleK  | EN 
Microsoft | EN 
Toshiba  | EN 
Indomaret | EN 
Indomaret | EN 
Indomaret | EN 
Indomaret | EN 
ThorSHop  | EN 
Indomaret | EN 
carrefour | EN 
Zara   | EN 

なぜかconvert_fromlikequeryになりますか? 私は何をすべきですか? ご注意いただきありがとうございます。

+0

なぜbase64でエンコードされたユーザー名をデータベースに保存していますか? – e4c5

+0

それは私の会社の卿のルールです。 – yose

+2

は完全に間違ったルールですが、あなたはそれを持って生きなければならないと思います。 – e4c5

答えて

1

convert_fromが機能

SELECT CONVERT_FROM(DECODE(username, 'BASE64'), 'UTF-8'),language 
from cmsusers where 
CONVERT_FROM(DECODE(username, 'BASE64'), 'UTF-8') like '%c%'; 

あるので、ユーザー名にインデックスを持っている場合、それはここでは使用されず、このクエリはかなり遅いFOである可能性が高いです大きなテーブル。

+0

あなたの質問に感謝します。それが私が必要とするものです! – yose

+0

助けてくれてうれしい – e4c5

1

CONVERT_FROMは、フィールドの名前ではなく、関数です。したがって、WHERE句では、関数を文字列と比較しようとしていますが、これは意味をなさないものです。 SQLは、以前にその関数がどのように使用されたかに基づいて自動的にパラメータを差し引いていません。だから、あなたは、あなたが完全な形で比較しているものを指定する必要があり、次のいずれか

SELECT 
    CONVERT_FROM(DECODE(username, 'BASE64'), 'UTF-8'), 
    language 
FROM cmsusers 
WHERE CONVERT_FROM(DECODE(username, 'BASE64'), 'UTF-8') like '%c%'; 

またはあなたのSELECT文でフィールドのエイリアスを追加し、あなたがのさまざまな部分でそれを参照する能力を得るでしょうそのようにクエリ:

SELECT 
    CONVERT_FROM(DECODE(username, 'BASE64'), 'UTF-8') AS decoded_name, 
    language 
FROM cmsusers 
WHERE decoded_name like '%c%'; 
+0

偉大な先生!ご回答有難うございます。 – yose

+0

@yoseいずれかの回答が良いと思うなら、[そのうちの1つを受け入れる]と考えてください(http://stackoverflow.com/help/someone-answers) – yeputons

関連する問題