簡體   English   中英

如何使用分隔符拆分字符串並轉換為整數

[英]How to split string with delimiter and convert to integer

嗨我在sql server程序中寫入查詢,其中我傳遞逗號分隔nvarchar值我想在sql server中過濾這些值查詢代碼如下

declare @RoleId NVARCHAR(MAX) = '1,2,3'
Declare @RoleTempId  int;
Set @RoleTempId = Cast(@RoleId As INT);
BEGIN
SELECT        dbo.RolePermission.PermissionId, dbo.Permission.PermissionName
FROM            dbo.RolePermission INNER JOIN
                         dbo.Permission ON dbo.RolePermission.PermissionId = dbo.Permission.PermissionId
WHERE        (dbo.RolePermission.RoleId IN (@RoleTempId))
END

這是錯誤請指導我這個查詢謝謝。

字符串拆分的一個簡單解決方案是將源( 1,2,3 )字符串(可以聲明為VARCHAR而不是NVARCHAR 如果它只包含整數)轉換為XML( <r>1</r><r>2</r><r>3</r> )然后你可以粉碎這個XML並將每個值(整數)插入到一個表變量中:

DECLARE @RoleId NVARCHAR(MAX) = '1,2,3'

DECLARE @SelectedRoles TABLE (RoleId INT PRIMARY KEY); -- No duplicates allowed

DECLARE @x XML;
SET @x = N'<r>' + REPLACE((SELECT @RoleId FOR XML PATH('')), N',', N'</r><r>') + N'</r>';
/*
@x content:
<r>1</r><r>2</r><r>3</r>
*/
INSERT  @SelectedRoles (RoleId)
SELECT  y.XmlCol.value('(.)', 'INT') AS RoleId
FROM    @x.nodes('/r') y(XmlCol);

...
WHERE        (dbo.RolePermission.RoleId IN (SELECT sr.RoleId FROM @SelectedRoles sr))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM