我在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发布于 2016-09-21 02:13:56
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。根据你所处的位置和你想要归类为数字的内容,有一些事情需要考虑。
大多数常见的格式都可以工作--但您可能会有不同的格式。下面的所有这些都可以归类为数字,但是ISNUMERIC可以返回你不希望是数字的东西。
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,并有可能获得更准确的结果。
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发布于 2016-09-21 01:35:18
SQL Server用户定义函数中没有异常处理。但是,有一个名为ISNUMERIC的内置函数。
SELECT ISNUMERIC( 'FOO' ), ISNUMERIC( 1 )发布于 2016-09-21 01:30:55
有一个内置函数ISNUMERIC https://msdn.microsoft.com/library/ms186272.aspx
https://stackoverflow.com/questions/39600116
复制相似问题