选择最后6位数的存储过程

时间:2011-06-03 17:41:45

标签: sql sql-server stored-procedures

我在SQL表中有一个数字字段,其中包含一个大数字(9位数,一个客户信息编号)。我想运行一个存储过程,它只会选择数字的最后6位数。

类似的东西:

SELECT (Last 6 Digits of num) FROM db
WHERE user = @user

有谁知道如何实现这个目标?

5 个答案:

答案 0 :(得分:19)

DECLARE @bigOne bigint

SET @bigOne = 999333444

SELECT RIGHT(@bigOne, 6)

返回具有指定字符数的字符串的右侧部分。 以下是Right()函数的MSDN: http://msdn.microsoft.com/en-us/library/ms177532.aspx

在您的案例中,您可以这样做:

SELECT RIGHT(num, 6) FROM db WHERE user=@user

只需将num替换为数据库表中列的名称,然后将db更改为您SELECT的表名。

答案 1 :(得分:5)

您可以使用modulo运算符轻松提取最后6位数,假设num是数值数据类型:

select num % 1000000 as num
from db
where user = ?

答案 2 :(得分:4)

假设SQL Server,

SELECT subtring(num,len(num)-6,6) FROM db
WHERE user = @user

其他口味可能会使用substr而不是substring

答案 3 :(得分:1)

将其转换为字符串,然后使用SUBSTRING和LEN仅拉出您需要的部分。

答案 4 :(得分:0)

这将准确地从您传递的参数中获取最后6位数字。

有一点需要注意。在SQL Server 2005中,“\”(反斜杠)字符不会由ISNUMERIC返回1。但它确实在SQL Server 2008中。这个函数应该适用于两个版本的SQL Server,因为我们只是在上面的第7个测试参数中排除这个字符。

PRINT RIGHT(dbo.fnNumericDigits('5-555-555551-2345-6-'),6)

标量值函数:

ALTER FUNCTION [dbo].[fnNumericDigits]
(
    @startString NVARCHAR(255)
) RETURNS NVARCHAR(255)
AS
BEGIN

    DECLARE @returnString NVARCHAR(255)
    DECLARE @length INT, @currentDigit INT, @currentCharacter NVARCHAR(1)
    SELECT @length = LEN(@startString), @currentDigit = 1, @returnString = ''

    WHILE @currentDigit <= @length
    BEGIN

    SELECT @currentCharacter = SUBSTRING(@startString, @currentDigit, @currentDigit)

    IF ISNUMERIC(@currentCharacter) = 1 
        AND @currentCharacter != '$'
        AND @currentCharacter != '+'
        AND @currentCharacter != ','
        AND @currentCharacter != '-'
        AND @currentCharacter != '.'
        AND @currentCharacter != '\'
    BEGIN
    SELECT @returnString = @returnString + @currentCharacter
    END

    SELECT @currentDigit = @currentDigit + 1

END

RETURN @returnString
END