请教判断某一列是不是整数的写法

zlcqupt 2010-04-06 03:51:05
判断test列是不是int型的

方法1.使用正则表达式
方法2.可以用函数吗?

谢谢
...全文
220 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxiaohui8709253 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 kerafan 的回复:]
SQL code


if (isnumeric('1.01') = 1 and charindex('.','1.01') = 0)
print 'int'
else
print 'not int'

if (isnumeric('1') = 1 and charindex('.','1') = 0)
print 'int'
else
pri……
[/Quote]
学习 老黎
chuifengde 2010-04-06
  • 打赏
  • 举报
回复
那'++++345'呢?
chuifengde 2010-04-06
  • 打赏
  • 举报
回复
+345算不算整?
leo_lesley 2010-04-06
  • 打赏
  • 举报
回复
declare @a table(id INT identity(1,1),a varchar(20))
INSERT @a SELECT NULL
UNION ALL SELECT '2342'
UNION ALL SELECT '323.532'
UNION ALL SELECT '-3232'
UNION ALL SELECT 0
UNION ALL SELECT '23--342'
UNION ALL SELECT 'asdf234'
UNION ALL SELECT '123.00'


-- 如果考虑正负也的考虑第一位的正负号
SELECT id, a,CASE WHEN patindex('[^-]%[^0-9]%',a)>0 THEN 'False' ELSE 'True' END FROM @a

/* 结果

id a
----------- -------------------- -----
1 NULL True
2 2342 True
3 323.532 False
4 -3232 True
5 0 True
6 23--342 False
7 asdf234 False
8 123.00 False

*/
chuifengde 2010-04-06
  • 打赏
  • 举报
回复
4是整那,4.算不算整
-狙击手- 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 ldslove 的回复:]
id a res
----------- -------------------- -----
1 NULL True
[/Quote]


SELECT id, a,CASE WHEN patindex('%[^-0-9]%',isnull(a,'s'))>0 THEN 'False' ELSE 'True' END res FROM @a

东那个升 2010-04-06
  • 打赏
  • 举报
回复
id a res
----------- -------------------- -----
1 NULL True
-狙击手- 2010-04-06
  • 打赏
  • 举报
回复
declare @a table(id INT identity(1,1),a varchar(20))
INSERT @a SELECT NULL
UNION ALL SELECT '2342'
UNION ALL SELECT '323.532'
UNION ALL SELECT '-3232'
UNION ALL SELECT '0'
UNION ALL SELECT '23342'
UNION ALL SELECT 'asdf234'



SELECT id, a,CASE WHEN patindex('%[^-0-9]%',a)>0 THEN 'False' ELSE 'True' END res FROM @a

id a res
----------- -------------------- -----
1 NULL True
2 2342 True
3 323.532 False
4 -3232 True
5 0 True
6 23342 True
7 asdf234 False

(7 行受影响)


东那个升 2010-04-06
  • 打赏
  • 举报
回复
-号。。。
-狙击手- 2010-04-06
  • 打赏
  • 举报
回复
4 -3232 False
????
leo_lesley 2010-04-06
  • 打赏
  • 举报
回复
declare @a table(id INT identity(1,1),a varchar(20))
INSERT @a SELECT NULL
UNION ALL SELECT '2342'
UNION ALL SELECT '323.532'
UNION ALL SELECT '-3232'
UNION ALL SELECT 0
UNION ALL SELECT '23342'
UNION ALL SELECT 'asdf234'



SELECT id, a,CASE WHEN patindex('%[^0-9]%',a)>0 THEN 'False' ELSE 'True' END res FROM @a

/* 结果

id a res
----------- -------------------- -----
1 NULL True
2 2342 True
3 323.532 False
4 -3232 False
5 0 True
6 23342 True
7 asdf234 False

(7 row(s) affected)
*/
东那个升 2010-04-06
  • 打赏
  • 举报
回复

declare @a table(id INT identity(1,1),a varchar(20))
INSERT @a SELECT NULL
UNION ALL SELECT '2342'
UNION ALL SELECT '323.532'
UNION ALL SELECT '-3232'
UNION ALL SELECT '0'
UNION ALL SELECT '23342'
UNION ALL SELECT 'asdf234'

select *,case when isnumeric(a) =1 and charindex('.',a)=0 then '是' else '否' end
from @a

(7 行受影响)
id a
----------- -------------------- ----
1 NULL 否
2 2342 是
3 323.532 否
4 -3232 是
5 0 是
6 23342 是
7 asdf234 否

(7 行受影响)
老黎 2010-04-06
  • 打赏
  • 举报
回复


if (isnumeric('1.01') = 1 and charindex('.','1.01') = 0)
print 'int'
else
print 'not int'

if (isnumeric('1') = 1 and charindex('.','1') = 0)
print 'int'
else
print 'not int'

--结果
/*
not int
int

*/
bestzrz 2010-04-06
  • 打赏
  • 举报
回复
原来是判断数值的属性,刚刚看到
zlcqupt 2010-04-06
  • 打赏
  • 举报
回复
呵呵,我说的实在是不明确。

一个列test,属性是varchar(50)型的
想要判断它保存的数据是不是纯int的。比如25就是,2.5就不是
老黎 2010-04-06
  • 打赏
  • 举报
回复

--用isnumeric
print isnumeric('1')
print isnumeric('1.01')
print isnumeric('A101')
print isnumeric('楼主')

--结果
/*
1
1
0
0

*/
bestzrz 2010-04-06
  • 打赏
  • 举报
回复

IF(SELECT DATA_TYPE FROM information_schema.columns
WHERE TABLE_NAME='表名' AND COLUMN_NAME='test')='int'
BEGIN
--test列是int型
END
-狙击手- 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 zlcqupt 的回复:]
happyflystone:
name不明确,即使明确了,也不是我要的东东啊
[/Quote]

少s.

那是一开始你的问题不明确

ISNUMERIC ( expression )
chuifengde 2010-04-06
  • 打赏
  • 举报
回复
declare @a table(id INT identity(1,1),a varchar(20))
INSERT @a SELECT NULL
UNION ALL SELECT '2342'
UNION ALL SELECT '323.532'
UNION ALL SELECT '-3232'
UNION ALL SELECT 0
UNION ALL SELECT '23342'
UNION ALL SELECT 'asdf234'


SELECT id, CASE WHEN ISnumeric(a)=1 and CEILING(a)=a THEN 'True' ELSE 'False' END res FROM @a

--result
/*id res
----------- -----
1 False
2 True
3 False
4 True
5 True
6 True
7 False

(所影响的行数为 7 行)*/
zlcqupt 2010-04-06
  • 打赏
  • 举报
回复
ISNUMERIC会把带小数点的也返回1吧?

天啊,请给个正则表达式解决方法吧。
可能是我说的有歧义,我是问,用正则的方法有哪些?有函数的方法有哪些?
加载更多回复(13)

34,575

社区成员

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

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