我在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
答案 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)
内置函数ISNUMERIC https://msdn.microsoft.com/library/ms186272.aspx
答案 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