我在SQL表中有一个数字字段,其中包含一个大数字(9位数,一个客户信息编号)。我想运行一个存储过程,它只会选择数字的最后6位数。
类似的东西:
SELECT (Last 6 Digits of num) FROM db
WHERE user = @user
有谁知道如何实现这个目标?
答案 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