我需要验证的位数小数点(比例)TSQL如何验证数量的规模
0的权利,在任何地方(十分之一,百分之一,千分之一的有效号码,等等。)。
任何提示或技巧?...没有广泛的正则表达式库,没有内置的函数,我更喜欢一个函数,接受数量,数量的地方,规模应该等于,然后返回一点。
与Maess的建议的后续行动,我想出了这一点:
CREATE FUNCTION [dbo].[GetScale]
(
@tsValue varchar(250)
, @tiScale int
)
RETURNS int
AS
BEGIN
DECLARE
@tiResult int
, @tiValueScale int
SET @tiResult = 0
SELECT @tiValueScale = LEN(SUBSTRING (@tsValue, PATINDEX('%.%', @tsValue) + 1, LEN(@tsValue)))
IF (@tiValueScale = @tiScale)
SET @tiResult = 1
RETURN @tiResult
END
GO
似乎需要工作。谢谢您的帮助。
就像一个后续......我遇到了一个问题,其中一个数字没有小数(它将返回的patindex为0),并且该数字与该比例尺寸相同,它将返回误报。所以我增加一个额外的选择从PATINDEX,以确定是否确实存在或不...现在看起来是这样的:
- =============================================
ALTER FUNCTION [dbo].[GetScale]
(
@tsValue varchar(250)
, @tiScale int
)
RETURNS int
AS
BEGIN
DECLARE
@tiResult int
, @tiValueScale int
, @tiDecimalExists int
SET @tiResult = 0
SET @tiDecimalExists = 0
SELECT @tiDecimalExists = PATINDEX('%.%', @tsValue)
IF (@tiDecimalExists != 0)
BEGIN
SELECT @tiValueScale = LEN(SUBSTRING (@tsValue, @tiDecimalExists + 1, LEN(@tsValue)))
IF (@tiValueScale = @tiScale)
SET @tiResult = 1
END
RETURN @tiResult
END
你尝试过什么?如果你想按代码做代码,那么你应该聘请一名顾问。堆栈溢出是针对特定问题的帮助。 – JNK
将其转换为字符串,在十进制数上解析它,并获取表示小数点右边的数字的字符串的长度。 – Maess
我曾考虑将其转换为字符串,但我希望能找到一些不像黑客那样的东西......这可能是我最终要做的事情,尽管无论如何 – Patrick