怎么取一个字段全是数字的记录

chengpei_chen 2007-10-29 12:39:27
请问怎么取一个字段中所有的字符都是数字的数据
比如果有个字段 字段1 数据如下
445544
878787
78xx54
87788d
我想取出的结果如下
445544
878787
...全文
410 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
pt1314917 2007-10-29
  • 打赏
  • 举报
回复

支持子陌大哥
select * from 表 where isnumberic(字段1)=1
jinjazz 2007-10-29
  • 打赏
  • 举报
回复
子陌兄,你可以试试
select cast('1e2' as float),isnumeric('1e2')

应该除了isnumberic,还要排除'e',不知道还要排除什么
子陌红尘 2007-10-29
  • 打赏
  • 举报
回复
select * from 表 where isnumberic(字段1)=1
hankwen 2007-10-29
  • 打赏
  • 举报
回复
领教了....厉害
晓风残月0110 2007-10-29
  • 打赏
  • 举报
回复
好多解法啊,想不到了
ljs1519 2007-10-29
  • 打赏
  • 举报
回复
对呀用 not like '%[^0-9]%
dulei115 2007-10-29
  • 打赏
  • 举报
回复
直接这样 not like '%[^0-9]%'
FAFA_2007 2007-10-29
  • 打赏
  • 举报
回复
学习ING
dawugui 2007-10-29
  • 打赏
  • 举报
回复
就是钻石的:

select * from 表 where isnumberic(字段1)=1

就可以了,不用这么复杂吧?
fcuandy 2007-10-29
  • 打赏
  • 举报
回复
楼上的方法好. 我都把patindex忘了,hehe
chuifengde 2007-10-29
  • 打赏
  • 举报
回复
select * from [Table] where patindex('%[^0-9]%',a)=0
fcuandy 2007-10-29
  • 打赏
  • 举报
回复
上面打掉了一句,

SET ROWCOUNT @L
SELECT @i=@i+1,@sql=@sql + ' UNION SELECT ' + RTRIM(@i) FROM sysobjects
后加上
SET ROWCOUNT 0
不好意思.
fcuandy 2007-10-29
  • 打赏
  • 举报
回复
如果做成通用的,即不必每次改LIke后的表达式,可以按下面这种写法

DECLARE @t TABLE(v VARCHAR(6))
INSERT @t SELECT '445544'
UNION ALL SELECT '228787'
UNION ALL SELECT '78xx54'
UNION ALL SELECT '87788d'
UNION ALL SELECT '1e2222'

SELECT v FROM @t a
INNER JOIN (SELECT 1 id UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6) b
ON CHARINDEX(SUBSTRING(v,id,1),'0123456789')>0
GROUP BY v
HAVING COUNT(id)=6


从而用exec执行动态语句,来适应v 为任意长的varchar. 设v字段数据进行过格式化,每个行的值长度都相同

CREATE TABLE t(v VARCHAR(6))
INSERT t SELECT '445544'
UNION ALL SELECT '228787'
UNION ALL SELECT '78xx54'
UNION ALL SELECT '87788d'
UNION ALL SELECT '1e2222'

DECLARE @L INT,@i INT
DECLARE @sql VARCHAR(8000)
SELECT @L=LEN(v),@i=0,@sql='' FROM t
SET ROWCOUNT @L
SELECT @i=@i+1,@sql=@sql + ' UNION SELECT ' + RTRIM(@i) FROM sysobjects
SET @sql='SELECT v FROM t a
INNER JOIN (' + STUFF(@sql,1,14,' SELECT id=') + ') b ON CHARINDEX(SUBSTRING(v,id,1),''0123456789'')>0 GROUP BY v HAVING COUNT(id)=' + RTRIM(@L)
EXEC (@sql)
DROP TABLE t



fcuandy 2007-10-29
  • 打赏
  • 举报
回复
如果字段长度固定,可以使用
WHERE 字段1 LIKE '[1-9][0-9][0-9][0-9][0-9][0-9][0-9]'
jinjazz 2007-10-29
  • 打赏
  • 举报
回复

[code=SQL]
--ISNUMERIC ( expression )
--备注
--如果输入表达式的计算值为有效的整数、浮点数、money 或 decimal 类型时,ISNUMERIC 返回 1;否则返回 0。返回值为 1 时,指示可将 expression 至少转换为上述数值类型中的一种。

select
isnumeric('1e-2'),
isnumeric('1e+2'),
isnumeric('1e2'),
isnumeric('1.1'),
isnumeric('-1.1'),
isnumeric('+1.1'),
isnumeric('$12'),
isnumeric('¥12')

--在单纯判断字段是否只含有数字的情况下用这个函数,可能会有以上情况干扰

[/code]
jinjazz 2007-10-29
  • 打赏
  • 举报
回复

--ISNUMERIC ( expression )
--备注
--如果输入表达式的计算值为有效的整数、浮点数、money 或 decimal 类型时,ISNUMERIC 返回 1;否则返回 0。返回值为 1 时,指示可将 expression 至少转换为上述数值类型中的一种。

select
isnumeric('1e-2'),
isnumeric('1e+2'),
isnumeric('1e2'),
isnumeric('1.1'),
isnumeric('-1.1'),
isnumeric('+1.1'),
isnumeric('$12'),
isnumeric('¥12')

--在单纯判断字段是否只含有数字的情况下用这个函数,可能会有以上情况干扰
kelph 2007-10-29
  • 打赏
  • 举报
回复
排除'e','E'就可以了
select * from 表 where isnumberic(字段1)=1 and charindex(upper(字段1),'E') = 0

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧