在sql中只获取字母数字行?

时间:2012-04-27 13:33:40

标签: sql sql-server sql-server-2008

我列有数据

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

除了这行外,所有行都应该包括在内?

我怎么能得到这个?

6 个答案:

答案 0 :(得分: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返回指定表达式中第一次出现模式的起始位置。由于我使用的模式与任何非字母数字(^ Wildcard - Character)匹配,因此仅返回仅包含字母数字字符(+空格)的记录:

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

结果:

CLARK
KING
MILLER
ALLEN30
WARD30
MARTIN30
BLAKE30
TURNER30
JAMES30

答案 1 :(得分:0)

select * from your_table
where len((replace(your_col, '$', '')) != len(your_col)

答案 2 :(得分:0)

好吧,部分问题是表设计很差 - 列应该是原子的,只包含一种类型的项。如果数字在一个单独的列(正确的设计)中,您可以使用几种技术来返回已填充数字的行(例如,WHERE NOT NULL,作为一个简单示例)。

在您的情况下,假设您不想更改表设计,可以使用LIKE子句查找列包含“$”的行。这是非常低效的,我建议它没有认可它。

答案 3 :(得分:0)

您可以使用类似于:

的案例陈述
SELECT colname = CASE CaseName
    WHEN '%$%' THEN colname
    END
FROM tablename

答案 4 :(得分: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

答案 5 :(得分:0)

select col
from tab
where PATINDEX('%[^a-z0-9]%',col)=0