在下面的细节中,我很难在返回时将我的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时出错。"
答案 0 :(得分:0)
您使用的是错误的PATINDEX。删除^
字符。
此外,每当遇到这样的问题时,调试它的简单方法是运行没有转换的选择,看看你得到了什么
CONVERT(bigint, SUBSTRING([id], (PATINDEX('%[0-9]%', [id])), 50)) As id