T-SQL相当于To_number

时间:2016-09-20 17:14:30

标签: sql sql-server oracle tsql

我在oracle中有一个函数,我试图在sql server中重写它。我试图用cast重写它,但没有用。我被卡住了。有人可以建议一个解决方法。这是oracle代码,我必须转换为sql server:

FUNCTION IsNumeric (sRESPONSE_STRING IN FY_ST_ANSWER_DETAIL.RESPONSE_STRING%TYPE Default NULL)
    RETURN BOOLEAN
    IS
    test_value NUMERIC;
    BEGIN
         test_value := To_Number(Replace(Replace(sRESPONSE_STRING,','),'$'));
         RETURN (true);

            EXCEPTION
            WHEN OTHERS THEN
            RETURN (false);
        END;

谢谢..

这就是我所拥有的:

CREATE FUNCTION [HSIP].[Isnumeric] 
(
    @sResponse_string varchar(250)

)
RETURNS BOOLEAN
AS
BEGIN
    -- Declare the return variable here
    DECLARE testvalue= cast((@sresponse_string) as varchar[250]);


return @testvalue;
END

4 个答案:

答案 0 :(得分:3)

JT有一个正确的答案。以下是如何在代码中应用它:

CREATE FUNCTION [HSIP].[Isnumeric]  (@InputVar varchar(250))
RETURNS BIT
AS
BEGIN
    DECLARE @returnVal BIT

    IF ISNUMERIC(@InputVar) = 1
       SET @returnVal = 1 --true
    ELSE
       SET @returnVal = 0 --false

RETURN @returnVal
END

我建议你阅读ISNUMERIC。根据您所处的位置以及您想要将其分类为数字,有一些事项需要考虑。

大多数常见格式都可以使用 - 但您的格式可能不同。以下所有这些都将归类为NUMERIC,但ISNUMERIC可以返回您不会期望为NUMERIC的内容。

select isnumeric('12.556')     --returns true / 1
select isnumeric('12,556')     --returns true / 1
select isnumeric('12,556.66')  --returns true / 1
select isnumeric('$12,556.66') --returns true / 1
select isnumeric('1e56')       --returns true / 1

或者,如果您使用SQL 2012或更高版本,则可以使用TRY_CONVERT来获得更准确的结果。

CREATE FUNCTION [HSIP].[Isnumeric]  (@InputVar varchar(250))
    RETURNS BIT
    AS
    BEGIN
        DECLARE @returnVal BIT

        IF TRY_CONVERT(DECIMAL,@InputVar) IS NOT NULL
           SET @returnVal = 1 --true
        ELSE
           SET @returnVal = 0 --false

    RETURN @returnVal
    END

正如您将注意到的那样......这里的逗号处理方式不同,货币符号也是如此。

SELECT TRY_CONVERT(DECIMAL,'12556')      --returns true  / 12556
SELECT TRY_CONVERT(DECIMAL,'12.556')     --returns true  / 13
SELECT TRY_CONVERT(DECIMAL,'12,556')     --returns false / NULL
SELECT TRY_CONVERT(DECIMAL,'12,556.66')  --returns false / NULL
SELECT TRY_CONVERT(DECIMAL,'$12,556.66') --returns false / NULL
SELECT TRY_CONVERT(DECIMAL,'1e56')       --returns false / NULL

答案 1 :(得分:2)

SQL Server用户定义的函数中没有异常处理。但是,有一个名为ISNUMERIC的内置函数。

SELECT ISNUMERIC( 'FOO' ), ISNUMERIC( 1 )

答案 2 :(得分:0)

答案 3 :(得分:0)

终于明白了。西蒙的回应有所帮助。

LTER FUNCTION [hsip].[Isnumeric]  

(@sResponse_string varchar(250))
RETURNS BIT
AS
BEGIN
    DECLARE @returnVal BIT

    IF ISNUMERIC(REPLACE(REPLACE(@sResponse_string, ',',''),'$','')) = 1
       SET @returnVal = 1 --true
    ELSE
       SET @returnVal = 0 --false

RETURN @returnVal
END