は、入力された文字列を解析するために補助番号テーブルを使用する方法です。ロジックはテーブルを返す関数に簡単に追加できます。そのテーブルを結合して、正しい行を検索することができます。
ステップ1:数字テーブルを作成します
SET NOCOUNT ON
GO
IF EXISTS
(
SELECT 1
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'Numbers'
AND TABLE_SCHEMA = 'dbo'
AND TABLE_TYPE = 'BASE TABLE'
)
BEGIN
DROP TABLE dbo.Numbers
END
GO
CREATE TABLE dbo.Numbers
(
Number smallint IDENTITY(1, 1) PRIMARY KEY
)
GO
WHILE 1 = 1
BEGIN
INSERT INTO dbo.Numbers DEFAULT VALUES
IF SCOPE_IDENTITY() = 32767
BEGIN
BREAK
END
END
GO
ステップ2:入力文字列を解析
CREATE FUNCTION dbo.ParseString(@input_string varchar(8000), @delim varchar(8000) = " ")
RETURNS TABLE
AS RETURN
(
SELECT Number
FROM dbo.Numbers
WHERE CHARINDEX
(
@delim + CONVERT(VARCHAR(12),Number) + @delim,
@delim + @input_string + @delim
) > 0
)
GO
**EXAMPLE**
SELECT * FROM dbo.ParseString('1:45:34:98',':')
ステップ3:あなたは/必要
をしたいが、結果を使用します
Number
------
1
34
45
98
エンドツーエンドの例
適切なBNumber(もちろんコメントアウトSQLを使用するように変更)
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION dbo.GetBNumber (@uid int)
RETURNS VARCHAR(8000)
AS
BEGIN
RETURN '1:45:34:98'
--select B_Numbers from Info_Step WHERE uid = @uid
END
GO
返すために使用する機能を使用を返す関数を作成します。望ましい結果
-- Using Test Data
SELECT N.Number FROM Numbers N
JOIN dbo.ParseString(dbo.GetBNumber(12345),':') Q ON Q.Number = N.Number
-- Using Your Data (Untested but should work.)
SELECT N.Bay
FROM TABLE N
JOIN dbo.ParseString(dbo.GetBNumber(ENTER YOU NUMBER HERE),':') Q ON Q.Number = N.uid
結果
Number
------
1
34
45
98
入力文字列をトークンに分割する必要がありますので、これは動作しませんが(4異なる行)とテーブルは一緒に結合されます。あなたのメソッドは '..... 1:45:34:98 .....'のようなUIDを見つけようとします.UIDはおそらく整数なので、そうではありません。 – beach