1

列に特定の文字のみを含む行のみを取得したい。
列名が DATA だとしましょう。

DATA が ONLY であるすべての行を取得したい (3 つの条件すべてが必要です!):

  • 数字(1 2 3 4 5 6 7 8 9 0
  • ダッシュ ( -)
  • カンマ ( ,)

例えば:

"10,20,20-30,30"はOKです

"10,20A,20-30,30Z"が正しくありません

"30"が正しくありません

"AAAA"が正しくありません

"30-"が正しくありません

"30,"が正しくありません

"-,"が正しくありません

4

4 に答える 4

2

編集:質問が編集されたため、この回答は正しくありません。他の人がすでに更新しているので、わざわざ更新するつもりはありません。この答えは、3 つの文字タイプをすべて見つけなければならないという条件を満たしません。


少し複雑ですが、これにはLIKE式を使用できます。

where data not like '%[^0123456789,!-]%' escape '!'

説明:

[^...]部分にない任意の文字に一致します...%任意の数 (0 を含む) の任意の文字に一致します。許可[^0123456789-,]しない文字セットも同様です。

ただし: -は 内の特殊文字である[]ため、エスケープ文字を使用してエスケープする必要があり、私は を選択しました!

したがって、許可されていないセットにない文字( ) を含まない行に一致します。not like

于 2013-04-03T08:54:24.413 に答える
0

PATINDEXおよびLIKE論理演算子でオプションを使用する

SELECT *
FROM dbo.test70
WHERE PATINDEX('%[A-Z]%', DATA) = 0
  AND PATINDEX('%[0-9]%', DATA) > 0
  AND DATA LIKE '%-%'
  AND DATA LIKE '%,%'

SQLFiddle のデモ

于 2013-04-03T09:01:15.273 に答える
0

As already mentioned u can use a LIKE expression but it will only work with some minor modifications, otherwise too many rows will be filtered out.

SELECT * FROM X WHERE T NOT LIKE '%[^0-9!-,]%' ESCAPE '!'

see working example here: http://sqlfiddle.com/#!3/474f5/6

edit:

to meet all 3 conditions:

    SELECT * 
    FROM X
    WHERE T LIKE '%[0-9]%'
      AND T LIKE '%-%'
      AND T LIKE '%,%'

see: http://sqlfiddle.com/#!3/86328/1

Maybe not the most beautiful but a working solution.

于 2013-04-03T09:14:35.907 に答える