2

データの列を作成しました

CLARK
KING
MILLER
SMITH, $800 .00
JONES, $2975.00
SCOTT, $3000.00
ADAMS, $1100.00
FORD, $3000.00
ALLEN30  
WARD30  
MARTIN30  
BLAKE30  
TURNER30  
JAMES30  

英数字の行だけが欲しい

SMITH, $800 .00
JONES, $2975.00
SCOTT, $3000.00
ADAMS, $1100.00
FORD, $3000.00

この行を除いて、すべての行を含める必要がありますか?

どうすればこれを入手できますか?

4

6 に答える 6

6

あなたが使用することができますPATINDEX

DECLARE @test table(col varchar(30));
INSERT INTO @test
   SELECT * FROM (SELECT 'CLARK' UNION ALL SELECT 'KING' UNION ALL SELECT 'MILLER' UNION ALL SELECT 'SMITH, $800 .00' UNION ALL SELECT 'JONES, $2975.00' UNION ALL SELECT 'SCOTT, $3000.00' UNION ALL SELECT 'ADAMS, $1100.00' UNION ALL SELECT 'FORD, $3000.00' UNION ALL SELECT 'ALLEN30' UNION ALL SELECT 'WARD30' UNION ALL SELECT 'MARTIN30' UNION ALL SELECT 'BLAKE30' UNION ALL SELECT 'TURNER30' UNION ALL SELECT 'JAMES30')AS T(Spalte)

Patindex指定された式でパターンが最初に出現する開始位置を返します。非英数字(^ワイルドカード-文字)に一致するパターンを使用したため、これは英数字(+空白)のみを含むレコードのみを返します。

SELECT col 
FROM   @test
WHERE  PATINDEX('%[^a-zA-Z0-9 ]%',col) = 0

結果:

CLARK
KING
MILLER
ALLEN30
WARD30
MARTIN30
BLAKE30
TURNER30
JAMES30
于 2012-04-27T13:41:30.110 に答える
0
select * from your_table
where len((replace(your_col, '$', '')) != len(your_col)
于 2012-04-27T13:38:15.803 に答える
0

問題の一部は、テーブルのデザインが貧弱であるということです。列はアトミックであり、1つのタイプのアイテムのみを含む必要があります。数値が別の列(正しい設計)にある場合は、いくつかの手法を使用して、数値が入力された行を返すことができます(たとえば、簡単な例として、WHERE NOT NULL)。

あなたの場合、テーブルのデザインを変更したくないと仮定すると、LIKE句を使用して、列に「$」が含まれている行を見つけることができます。ただし、これは非常に非効率的であり、承認せずに提案します。

于 2012-04-27T13:40:20.810 に答える
0

次のようなcaseステートメントを使用できます。

SELECT colname = CASE CaseName
    WHEN '%$%' THEN colname
    END
FROM tablename
于 2012-04-27T13:43:21.723 に答える
0

テーブルの構造はスピードを上げるために改善できると思いますが、私たちが持っているものを考えると...

Select * from [table]
where [column] like '%$%'

または、「$」のない行が必要でしたか?

Select * from [table]
where [column] not like '%$%'

もちろん、これはドル記号の付いた行のみが必要であると想定しています。

あなたがこのようなものを持っているとしたら:

[Name] [Dollars]
SMITH   800.00

次に、次のようにクエリできます。

Select [Name], [Dollars]
From [table]
Where [Dollars] is not null
于 2012-04-27T13:44:37.570 に答える
0
select col
from tab
where PATINDEX('%[^a-z0-9]%',col)=0
于 2012-04-27T13:45:44.633 に答える