2016-12-27 7 views
2

テーブルの行を数え、その結果を部分文字列にする必要があります。私は必要なものを得るために、私はこれを試してみました:count(1)エラーのMySQLサブストリング

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

次のクエリは、85を返します。

SELECT count(1) FROM users 

期待値が8あるときに最初のクエリが38を返します。なぜこうなった?それが起こっているのはなぜ

+0

あなたのSQLクエリによれば、それは '8'である必要があります。 db connectまたはいくつかの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 | 

stカウント(1)としてchar:

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

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