判断字符串是否为数字的方法介绍
本文导语: 判断字符串是否为数字,起初很简单的就写上了TRY...CATCH语句来判断,当时就指考虑了字符乘上数字一定会报错,就利用错误处理机制来判断是否为数字! 代码如下: CREATE FUNCTION A ( @str NVARCHAR(MAX) ) RETURNS INT AS ...
判断字符串是否为数字,起初很简单的就写上了TRY...CATCH语句来判断,当时就指考虑了字符乘上数字一定会报错,就利用错误处理机制来判断是否为数字!
(
@str NVARCHAR(MAX)
)
RETURNS INT
AS
BEGIN
DECLARE @bit BIT;
BEGIN TRY
SELECT @str * 1;
SET @bit = 1;
END TRY
BEGIN CATCH
SET @bit = 0;
END CATCH
RETURN @bit;
END
这个方法不妥,很多的问题:
1.题目给出的是函数,函数里面是不能套用TRY...CATCH的;
2.如果是十六进制,八进制或者二进制的字符串怎么办?二进制或八进制分别由0-1和0-7组成,或许可以更好的识别的为数字,但十六进制就不行了,多了A-F这几个字母,这样一弄,绝对会识别为不是数字,但它确实是十六进制的数字表达法!
3.函数要有返回值,这么写会报错:"函数中含有的 SELECT 语句无法向客户端返回数据."
4.可能说用PRINT,同样使用PRINT也会报错:"在函数内对带副作用的运算符 'PRINT' 的使用无效."
首先,就是要考虑,怎么把一个为八进制或十六进制的字符串转换为十进制的表达式(二进制暂时忽略掉),利用几种进制相互转换的攻势,写了一个进制转换的函数!但这里有一个问题,一个字符串我怎么判断它是八进制,十进制或者说十六进制,这里为了能更好的让程序自己去处理这个进制转换的事情,所以按照默认的进制表达式来处理了!例如八进制以0开头,十六进制以0x开头,其它的为十进制的,二进制暂不考虑!
根据传入的字符,转换为可以用的十进制;
八进制:0开头;
十六进制:0x开头;
*************************************************/
CREATE FUNCTION ChangeNum
(
@str NVARCHAR(MAX) --字符串
)
RETURNS NVARCHAR(MAX)
AS
BEGIN
DECLARE
@_Temp NVARCHAR(MAX),
@i INT;
SET @i = 1;
--去掉左右两边的空格,并且全部大写;
SET @str = LTRIM(RTRIM(UPPER(@str)));
SET @_Temp = '';
--十六进制
IF SUBSTRING(@str,1,2) = '0X'
BEGIN
WHILE @i