0

これはシナリオです:

私のアプリには次のものがあります。

  1. 何かのリストを表示するリストボックス (チェックボックスプロパティが有効)。
  2. ユーザーは、チェックボックスを使用してリストボックス (複数選択) から選択します。
  3. チェックしたすべての項目にループし、ID を配列に格納します。ID をコンマ (1,2,3,4) で区切って、このように ID を保存し、長さ -1 を使用して最後のコンマを削除します。

ストアド プロシージャがこのような場合、文字列 1,2,3,4 を整数型のデータに変換するにはどうすればよいですか?

Select * from tblSomething Where ID in (1,2,3,4)
4

5 に答える 5

1

次の SQL 関数を使用できます。

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION [dbo].[CommaSeparatedToString]
(
   @psCSString VARCHAR(8000)
)

RETURNS @otTemp TABLE(sID VARCHAR(20))
AS
BEGIN
DECLARE @sTemp VARCHAR(50)
WHILE LEN(@psCSString) > 0
BEGIN
SET @sTemp = LEFT(@psCSString, ISNULL(NULLIF(CHARINDEX(',', @psCSString) - 1, -1),
                LEN(@psCSString)))
SET @psCSString = SUBSTRING(@psCSString,ISNULL(NULLIF(CHARINDEX(',', @psCSString), 0),
                           LEN(@psCSString)) + 1, LEN(@psCSString))
INSERT INTO @otTemp VALUES (@sTemp)
END
RETURN
END

そして、次のようなストアドプロシージャを呼び出します

Select * from tblSomething 
Where ID in (SELECT * FROM CommaSeparatedToString('1,2,3,4'))
于 2013-05-03T08:31:47.707 に答える
0

を使用できます。

テーブルからキャスト (MyVarcharCol AS INT) を選択

SELECT CONVERT(INT, MyVarcharCol) FROM テーブル

このリンクを参照して ください http://msdn.microsoft.com/en-us/library/ms187928.aspx

于 2013-05-03T08:31:39.983 に答える
0

この関数を使用して値を分割します。

CREATE FUNCTION [dbo].[udfSplitCSV]
(
 @String varchar (max),
 @Delimiter varchar (10) = ','
)

RETURNS @ValueTable TABLE ([Row] int IDENTITY(1,1), [Value] varchar(max), [Length] int, [Duplicate] int NULL)

BEGIN

DECLARE @NextString varchar(max)
DECLARE @Pos int
DECLARE @NextPos int

IF  @String IS NULL RETURN 

 --Initialize
SET @NextString = ''
SET @String = @String + @Delimiter

 --Get position of first Comma
SET @Pos = charindex(@Delimiter,@String)
SET @NextPos = 1

 --Loop while there is still a comma in the String
 WHILE (@Pos <>  0)  
   BEGIN
   SET @NextString = RTrim(LTrim(SubString(@String,1,@Pos - 1)))
   INSERT INTO @ValueTable ([Value], [Length]) VALUES (@NextString, Len(@NextString))
   SET @String = SubString(@String,@Pos+1,Len(@String))
   SET @NextPos = @Pos
   SET @Pos  = CharIndex(@Delimiter,@String)
   END

UPDATE @ValueTable
   SET [Duplicate] = X.Duplicate
   FROM @ValueTable VT
   INNER JOIN (Select [Row], [Value], Row_Number() OVER (Partition By [Value] ORDER BY [Value], [Row]) as Duplicate FROM @ValueTable) X
      ON X.[Row] = VT.[Row]

RETURN
END

-- Select * from dbo.udfSplitCSV('a   , c b,c, a', ',')
于 2013-05-03T08:35:02.427 に答える