2

Sql Serevr 2008 を使用しています

次の行に沿って、データベース フィールドの桁数をカウントするにはどうすればよいですか。

select headline,
       REGEXP_count(name,'\d') as num_count
from accountTbl
where num_count > 3;

誰かが見出しテキストに 3 桁以上の数字を書いているかどうかを検出しようとしています。

たとえば、キャッチしたい:

'hello call me on 3 4 5 6 7 8' - match

'this is my number 234875' - match

'4 hello 4 and 66' - match

'leaving on the 24th going to be there at 6:30' - match
4

2 に答える 2

4

SQL Server 2008 は正規表現をサポートしていません。パターンのみがサポートされています。次のようなクエリを使用して、3 桁以上の一致を見つけることができます。

select headline
from accountTbl
where patindex('%[0-9]%[0-9]%[0-9]%', headline) > 0

カウントは得られませんが、フィルタリングすることはできます。このソリューションの欠点は、たとえば 5 桁を検索するには、パターン自体を変更する必要があることです。

sqlfiddle の簡単なデモを次に示します。

于 2013-02-09T11:28:35.493 に答える
1

SQL Server 2008 で文字列の数字を数える最も簡単な方法は、元の文字列の長さと、すべての数字文字 (0..9) を取り除いたときの長さの差を数えることです。クエリは次のようになります。

(LEN(headline) * 10) - LEN(REPLACE(headline, '0', '') + 
                           REPLACE(headline, '1', '') +
                           REPLACE(headline, '2', '') +
                           REPLACE(headline, '3', '') +
                           REPLACE(headline, '4', '') +
                           REPLACE(headline, '5', '') +
                           REPLACE(headline, '6', '') +
                           REPLACE(headline, '7', '') +
                           REPLACE(headline, '8', '') +
                           REPLACE(headline, '9', ''))

最初に各置換または連結文字列の長さを計算してから、そのすべての長さを計算する方が速いかどうかをテストする必要がありますが、文字列が非常に長くない場合、パフォーマンスの点ではどちらの方法もほぼ同じである必要があります。別の、連結されていないもう少し読みにくいバージョンは次のとおりです。

LEN(headline) - 
  LEN(REPLACE(
        REPLACE(
          REPLACE(
            REPLACE(
              REPLACE(
                 REPLACE(
                   REPLACE(
                     REPLACE(
                       REPLACE(
                         REPLACE(headline, '9', ''), 
                       '8', ''), 
                     '7', ''), 
                  '6', ''), 
                '5', ''), 
              '4', ''), 
            '3', ''), 
          '2', ''), 
        '1', ''), 
      '0', ''))

しかし、それによって視覚的に魅力的になったかどうかはよくわかりません (SQL Server 2008 では実際に正規表現を使用できます)。文字列の桁数を決定する方法が必要な場合は、検討する価値のある別のアプローチについては、このブログで説明しています。

乾杯!;)

于 2013-02-09T11:48:47.567 に答える