2 sakura chun sakura_chun 于 2016.01.19 22:30 提问

用 Isnumeric判断从SQLServer中取出的数据类型为numeric的数据返回值是False是为什么

之前在sybase环境时使用的是自动采番功能,现在移到SQLServer环境就想用取得最大值然后加一的方法实现插入。
因为本来就有写好的取得最大值的函数所以就拿来直接用了,在+1之前要用Isnumeric()判断是否为数字。
Isnumeric(从数据库取出的值)
用response.write显示从数据库取出来的值是3565613,
用response.write Isnumeric(从数据库取出的值)得到的结果是false
最后的解决方法是 在前面加了CLong函数(这里还有个问题一开始选择加的是CInt,但是返回值还是False是为什么?)
虽然解决了但是很想知道为什么返回值是False【明明是数字,难道跟小数有关系么?
文笔不好还请各位见谅~一共能2个问题希望知道的大神能回答~跪谢!

2个回答

caozhy
caozhy   Ds   Rxr 2016.01.19 22:31

numeric 在功能上等价于 decimal
表示定点数,vbs又没有类型,不存在什么类型匹配。

save4me
save4me   Ds   Rxr 2016.01.19 23:05

第一个问题,参考ISNUMERIC (Transact-SQL)

当输入表达式的计算结果为有效的 numeric 数据类型时,ISNUMERIC 返回 1;否则返回 0。

又参考vbscript中的True和False

vbscript中的常量True转换成十进制是-1,而不是我以为的1。常量False转换成十进制是0。

根据上面的两个说明,SQL Server对于ISNUMERIC是数字的返回了1,在VBScript中因为不是-1(True),所以返回False。

第二个问题,参考VBScript CInt 函数,对于CINT,参数

值必须是介于 -32768 与 32767 之间的数字。

你给出的3565613已经超出了上面的范围,所以返回False。

sakura_chun
sakura_chun 啊啊啊为什么一按回车就发出去了....抱歉...然后CUR_NO所在的SQL文是【SELECT MAX(xxx) AS CUR_NO FROM yyy】这个xxx在yyy表中的数据类型是numeric 所以我觉得不像是把TURE当1来判断了...不过也学习到啦再次谢谢
2 年多之前 回复
sakura_chun
sakura_chun 首先谢谢你的回答~今天去看了下代码。判断时的语句是【IF Isnumeric(objrs("CUR_NO").value THEN】
2 年多之前 回复
sakura_chun
sakura_chun 首先谢谢你的回答~今天去看了下代码
2 年多之前 回复
sakura_chun
sakura_chun 首先谢谢你的回答~今天去看了下代码
2 年多之前 回复
sakura_chun
sakura_chun 首先谢谢你的回答~今天去看了下代码
2 年多之前 回复
sakura_chun
sakura_chun 首先谢谢你的回答~今天去看了下代码
2 年多之前 回复
sakura_chun
sakura_chun 首先谢谢你的回答~今天去看了下代码
2 年多之前 回复
sakura_chun
sakura_chun 首先谢谢你的回答~今天去看了下代码
2 年多之前 回复
sakura_chun
sakura_chun 首先谢谢你的回答~今天去看了下代码
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
SQL SERVER ISNUMERIC函数判断数字不准确问题
判断字段是不是数值型字段,SQL SERVER提供了ISNUMERIC函数:   ISNUMERIC ( expression )        当输入表达式的计算结果为有效的 numeric 数据类型时,ISNUMERIC 返回 1;否则返回 0。 有效的 numeric 数据类型包括以下类型:    intnumericbigintmoneysmallintsmallmoneytinyintf...
坑人的SQL Server检测数字类型的函数ISNUMERIC
前几天,遇到一个十分棘手的问题,有同事提出在是字符类型的列中进行起止号计算,大体是这样的 新起号=上一条止号+1 新止号=新起号+数量 而在这一列的数据是这样的 库存 CN003?005007 000890670000 98111100 库存 370111900000 001,800,900,00 ~~~~~~~~~~~~ 木办法,问度娘吧,发现还是高人多啊,提出用ISN
SQL Server检测是不是数字类型的函数(非ISNUMERIC)
微软的SQL Server 2k/2k5 中对数字类型的判断函数如下:ISNUMERIC确定表达式是否为一个有效的数字类型。语法ISNUMERIC ( expression )参数expression要计算的表达式。返回类型int注释当输入表达式得数为一个有效的整数、浮点数、money 或 decimal 类型,那么 ISNUMERIC 返回 1;否则返
is_numeric 检测变量是否为数字或数字字符串
bool is_numeric ( mixed $var ) 如果 var 是数字和数字字符串则返回 TRUE,否则返回 FALSE。 For example : <?php $v = is_numeric ('58635272821786587286382824657568871098287278276543219876543') ? true : false;
IsNumeric 判断字符串是否为数字
IsNumeric 判断字符串是否为数字,如果是数字返回true,如果包含有汉字或字符的话返回false. 由于Delphi本身没有IsNumeric这个函数,不像其它语言,这个函数相当于Java的IsNaN函数。delphi代码function IsNumeric(AStr: string): Boolean; var Value: Double; Code: Integer; begin Va
postgresql中判断是否为数字和是否为时间日期格式的相关函数
postgresql中判断是否为数字和是否为时间日期格式的相关函数,类似于sqlserver中的isDate和isnumeric函数
SQL中ISNUMERIC函数
http://spiritflame.blog.sohu.com/135603132.htmlMS ISNUMERIC函数的作用是确定表达式是否为一个有效的数字类型。 语法: ISNUMERIC ( expression ) --备注 --如果输入表达式的计算值为有效的整数、浮点数、money 或 decimal 类型时,ISNUMERIC 返回 1;否则返回 0。返回值为 1 时,指示
SQL Server numeric数据类型
Numeric(10,2) 指字段是数字型,长度为10 小数为两位的 简要描述一下SQL中的五种数据类型:字符型,文本型,数值型,逻辑型和日期型 字符型 VARCHAR VS CHAR VARCHAR型和CHAR型数据的这个差别是细微的,但是非常重要。他们都是用来储存字符串长度小于255的字符。 假 如你向一个长度为四十个字符的VARCHAR型字段中输入数据Bill Gates
C#(IsNumeric) 字符串转换为数字的几种方法
判断C#中的字符串是否是数字,如果是转换成int类型1.通过正则表达式(可以判断正数和负数)a)public int IsNumeric(string str){ int i;if(str != null && System.Text.RegularExpressions.Regex.IsMatch(str,@"^-?/d+$"))i = int.Parse(str);elsei =
oracle判断是否为数字或数字型字符串(sqlserver isnumeric)
需求: 如果字段值不是数字或者数字型字符串,把该字段值update成''  1.函数法(不能批量,舍弃): create or replace function isNumber(p_in varchar2) return boolean as i number; begin i:=to_number(p_in)