将varchar转换为bigint时出错(CONVERT,SUBSTRING,PATINDEX)

时间:2015-04-19 15:27:26

标签: sql-server

在下面的细节中,我很难在返回时将我的id转换为bigint。 id的格式为{letters} {numbers},其中{letters}的长度可以是2或3个字符,{numbers}可以是任意长度。我试图先从我的id中获取数字,然后将这些数字转换为bigint并返回此代替id字段。我对SUBSTRING的理解是我可以使用PATINDEX来获取遇到数字的第一个索引并从该索引中获取子字符串。我将长度设置为50只是因为我不知道一个人的实际身份证有多长,50是[身份证]开始时的最大长度。

ALTER PROCEDURE [dbo].[GetSummoner] 
    @Id varchar(50)
AS
BEGIN
    SET NOCOUNT ON;
    SELECT
        CONVERT(bigint, SUBSTRING([id], (PATINDEX('%[^0-9]%', [id])), 50)) AS id
        ,[name]
        ,[modify_date]
        ,[profile_icon_id]
        ,[revision_date]
        ,[summoner_level]
    FROM [Summoners]
    WHERE [id]=@Id
END

编辑:错误消息:"将数据类型varchar转换为bigint时出错。"

1 个答案:

答案 0 :(得分:0)

您使用的是错误的PATINDEX。删除^字符。 此外,每当遇到这样的问题时,调试它的简单方法是运行没有转换的选择,看看你得到了什么 CONVERT(bigint, SUBSTRING([id], (PATINDEX('%[0-9]%', [id])), 50)) As id