16

値が奇妙な形式で保存されている読み取り専用データベースからいくつかの統計を行う必要があります

例:次のような2行があります

ID    text field 
1     1001,1003,1004 
2     1003, 1005

これが「5」であることを数えられるようにする必要があります。

私は書き込みアクセス権を持っていないので、関数などを作成せずにすぐに読み取ってカウントする方法がわかりません。

4

7 に答える 7

30

ここでの賢い解決策:コンマ区切りリストのアイテムをカウントする方法 MySQL

LENGTH(textfield) - LENGTH(REPLACE(textfield, ',', '')) + 1

編集

はい、追加の列として選択できます。@HamletHakobyan の回答から CHAR_LENGTH で修正します。

SELECT 
  ID, 
  textfield, 
  (CHAR_LENGTH(textfield) - CHAR_LENGTH(REPLACE(textfield, ',', '')) + 1) as total 
FROM table
于 2013-01-31T20:36:31.443 に答える
10
SELECT SUM(LENGTH(textfield) - LENGTH(REPLACE(textfield, ',', '')) + 1)
  FROM tablename
于 2013-01-31T20:35:51.853 に答える
7

すべての回答には、小さいながらも重要な省略があります。すべては、データベースの文字セットがutf8約である場合、つまりシンボル,が1バイトを取得する場合にのみ機能します。関数がの代わりにのLENGTH数を返すという事実。正解は、文字数を返すを使用することです。bytescharsCHAR_LENGTH

SELECT
   SUM(CHAR_LENGTH(textfield) - CHAR_LENGTH(REPLACE(textfield, ',', '')) + 1) cnt
FROM yourTable
于 2013-01-31T21:18:06.537 に答える
0

次のようなものを使用できます。

select sum(total) TotalWords
from
(
  select length(`text field`) - length(replace(`text field`, ',', '')) + 1 total
  from yourtable
) x

デモで SQL Fiddle を参照してください

于 2013-01-31T20:36:20.070 に答える
0
SELECT (LENGTH(column_name) - LENGTH(REPLACE(column_name, ',', '')) + 1) as value_count
  FROM table_name

ここでLENGTH(column_name) - LENGTH(REPLACE(column_name, ',', ''))は、各列の値に含まれるカンマの数を示します。この値を +1 すると、コンマで区切られた値の数が提供されます。

于 2019-02-19T08:52:01.103 に答える