我列有数据
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
除了这行外,所有行都应该包括在内?
我怎么能得到这个?
答案 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