首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >To_number的T-SQL等效项

问To_number的T-SQL等效项
EN

Stack Overflow用户
提问于 2016-09-21 01:14:30
回答 4查看 3.5K关注 0票数 1

我在oracle中有一个函数,我正在尝试在sql server中重写相同的函数。我试着用cast重写它,但不起作用。我被卡住了。有没有人能建议一个变通办法。下面是oracle代码,我必须转换成sql server:

代码语言:javascript
复制
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;

谢谢..

这就是我所拥有的:

代码语言:javascript
复制
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
EN

回答 4

Stack Overflow用户

发布于 2016-09-21 02:13:56

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

代码语言:javascript
复制
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。根据你所处的位置和你想要归类为数字的内容,有一些事情需要考虑。

大多数常见的格式都可以工作--但您可能会有不同的格式。下面的所有这些都可以归类为数字,但是ISNUMERIC可以返回你不希望是数字的东西。

代码语言:javascript
复制
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

或者,如果您使用SQL2012或更高版本,您可以使用TRY_CONVERT,并有可能获得更准确的结果。

代码语言:javascript
复制
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

如你所见..。逗号在这里的处理方式不同,金钱符号也是如此。

代码语言:javascript
复制
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
票数 3
EN

Stack Overflow用户

发布于 2016-09-21 01:35:18

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

代码语言:javascript
复制
SELECT ISNUMERIC( 'FOO' ), ISNUMERIC( 1 )
票数 2
EN

Stack Overflow用户

发布于 2016-09-21 01:30:55

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39600116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档