【问题标题】:How to add varchar and integer in sql server如何在sql server中添加varchar和integer
【发布时间】:2015-02-19 13:09:49
【问题描述】:

我必须将 int 转换为 varchar 并且需要考虑另外一个考虑因素。

例如:

1) 我的字符串长度总是 10 个字符。 (即“0000000001”)

每当我生成一个新 id 时,它都必须递增(即“0000000002”)
当它到达第 10 个字符串时将是“0000000010”等...
我不知道如何实现这一点。 尝试作为第一步。

--Declared variable to increment count
declare @CTR INT
--@LIPRequestID is integer this is what i have to add to my 
declare @LIPRequestID int
select @LIPRequestID=0
declare @LIPRequestIDstring varchar(max)
select @ctr=0
WHILE @CTR<2
BEGIN
select @ctr=@ctr+1
select @LIPRequestID=@LIPRequestID+1

select @LIPRequestIDstring='00000000'+ CAST(@LIPRequestID AS VARCHAR(10)
print @LIPRequestIDstring
END

但它抛出以下异常错误:

消息 102,级别 15,状态 1,第 14 行 '@LIPRequestIDstring' 附近的语法不正确。

谁能建议我哪里出错了?

【问题讨论】:

标签: sql-server sql-server-2008


【解决方案1】:

您应该使用RIGHT,而不是将字符串文字00000000 与ID 连接起来:

DECLARE @LIPRequestIDstring varchar(10);
DECLARE @nextLIPRequestID int;
SET @nextLIPRequestID = (SELECT MAX(LIPRequestID) FROM dbo.TableName) + 1;
SET @LIPRequestIDstring = RIGHT('0000000000'+ CONVERT(VARCHAR(10),@nextLIPRequestID),10)

【讨论】:

  • 脚本不适用于一位整数。脚本的最后一行应该有 9 个零,而不是 8 个 SET @LIPRequestIDstring = RIGHT('000000000'+ CONVERT(VARCHAR(10),@nextLIPRequestID),10) 除此之外,脚本的工作原理就像一个魅力。
  • 目前还没有表格,数字应该即时生成并需要将其存储在表格中
  • @Pankaj:我猜是 10 位而不是 8 位,因为“我的字符串长度总是 10 个字符”。
  • @chaithanyakishore:如果不存储最后一个数字,你想如何计算下一个数字?或者你想从最后一个/最大的数字中提取它?您必须使用 CONVERT 从 varchar 编号中获取 int,如下所示:CONVERT(int, (SELECT MAX(LIPRequestID) FROM dbo.TableName))。然后添加1,你就有了新号码。
  • @Tim Schmelter:实际上我必须在表格中创建虚拟数据,因为有一个自动生成的列,它会保存。我正在尝试创建此值,并且必须将其用作其他表中的参考键
【解决方案2】:

cast 函数中缺少Parenthesis,其他看起来还不错

select @LIPRequestIDstring='00000000'+ CAST(@LIPRequestID AS VARCHAR(10))--here

【讨论】:

    【解决方案3】:

    代替

    CAST(@LIPRequestID AS VARCHAR(10)
    

    使用

    CAST(@LIPRequestID AS VARCHAR(10))
    

    【讨论】:

    • 是的,纠正这个愚蠢的错误,但是第二个问题,但是在将数字增加到 10 时,我的字符串变成了 11 个字符,如果字符串长度超过 10 个字符,则必须删除第一个 '0'。请建议
    【解决方案4】:

    我们可以使用REPLACE函数代替RIGHT函数。这将帮助您实现您的两个要求。 ID 的长度也可以作为参数 @IDLength 传递。

    DECLARE @CTR INT = 0
    DECLARE @LIPRequestID INT = 0
    
    DECLARE @IDLength INT = 8
    
    DECLARE @LIPRequestIDstring VARCHAR(MAX)
    
    WHILE (@CTR < 12)
        BEGIN
            SELECT @CTR += 1
            SELECT @LIPRequestID += 1
            PRINT  REPLACE(STR(@LIPRequestID, @IDLength), SPACE(1), '0')
        END
    

    【讨论】:

      【解决方案5】:

      是的,Right 函数真的很有意义,这要归功于 sql 和 stackoverflow。

      声明@LIPRequestIDstring varchar(max) 选择@LIPRequestID=@LIPRequestID+1 选择@LIPRequestIDstring=RIGHT('0000000000'+ CONVERT(VARCHAR(10),@LIPRequestID),10)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-19
        • 2011-03-10
        • 2023-04-05
        • 2011-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-31
        相关资源
        最近更新 更多