期間の数に応じて結果を分類する必要があるシナリオが必要です。
フィールド値は次のとおりです。
aa.bb.ee.tt
aa.tt.ee
aa.tt
単一の期間で構成される値のみを検索したい場合、クエリは何になりますか?
列名がstrの場合、substr = "."と入力します。次の SQL では、必要なものが得られます。列 str の期間数でソート
SELECT (LENGTH(str) - LENGTH(REPLACE(str, substr, ''))) / LENGTH(substr) AS cnt
...
ORDER BY cnt DESC
文字列内の文字の出現をカウントする組み込みの MySQL 関数がないため、次の手順を使用して実行できます。
元。
SELECT CHAR_LENGTH('hello') - CHAR_LENGTH(REPLACE('hello', 'l', '')) AS `COUNT`
2 を返します
結果を並べ替えたい場合は
SELECT CHAR_LENGTH(colName) - CHAR_LENGTH(REPLACE(colName, xChar, '')) AS `COUNT`
FROM tableName
ORDER BY `COUNT` DESC
どこ
colName
は、文字列を含む列の名前です。
xChar
検索する文字です。
ところで、文字列の長さをバイト単位で返すので、CHAR_LENGTH()
代わりに使用します。文字単位で測定された文字列の長さを返します。LENGTH()
LENGTH()
CHAR_LENGTH()
private void CheckPeriod(string stringLine)
{
int counter = 0;
foreach (char c in stringLine)
{
if(c == ".")
{
counter = counter + 1;
}
}
if(counter == 1)
{
//Do code
}
}
これが役立つこと、または正しい方向を指すことを願っています
うーん、次のようなことができます
SELECT * FROM TABLE_NAME WHERE COL_NAME REGEXP "[A-Za-z0-9]*\.[A-Za-z0-9]*"
単一の期間の値を取得し、複数の期間の結果に対して同じ方法で期間を追加するため