2016-12-27 15 views
2

我需要對錶的行進行計數,然後對結果進行子串處理。爲了得到我需要什麼,我想這一點:MySQL的子計數(1)錯誤

SELECT substring(count(1),1,1) FROM users 

下面的查詢返回85

SELECT count(1) FROM users 

第一個查詢返回38當期望值爲8。這是爲什麼發生?

+0

根據你的sql查詢,應該是'8'。你是否在程序中通過db連接或者某些mysql工具執行這個查詢? – Acepcs

+0

我使用phpMyAdmin SQL選項執行了查詢 – cespon

回答

1

應該

SELECT substring(cast(count(1) as char), 1, 1) FROM users 
1

爲什麼它發生是因爲substring結果被隱式轉換爲binary(我沒有得到38可能是由於不同的字符集)。

select count(1) from users; 

| count(1) | 
|----------| 
|  85 | 

如果我用同樣的方法,您:

select substring(count(1),1,1) from users; 

| substring(count(1),1,1) | 
|-------------------------| 
|     OA== | 

是一樣的,如果我把結果作爲二進制:

select cast(substring(count(1),1,1) as binary) from users; 

| cast(substring(count(1),1,1) as binary) | 
|-----------------------------------------| 
|         OA== | 

但如果我投結果爲char,我得到正確結果:

select cast(substring(count(1),1,1) as char) from users; 

| cast(substring(count(1),1,1) as char) | 
|---------------------------------------| 
|          8 | 

如果I ca st count(1)as char:

select substring(cast(count(1) as char),1,1) from users; 

| substring(cast(count(1) as char),1,1) | 
|---------------------------------------| 
|          8 | 
相關問題