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

好吧,您的部分问题是表设计很差 - 列应该是原子的并且只包含一种类型的项目。如果数字在单独的列中(正确的设计),您可以使用多种技术来返回填充了数字的行(例如,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 回答