2017-02-03 27 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_fromlike使得query錯誤? 任何建議我必須做什麼? 感謝您的關注。

+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如果你認爲要麼答案好,考慮[接受其中之一] – yeputons

相關問題