3

次の列の 6 番目のフィールドから値を取得するにはどうすればよいですか? 333 フィールドを取得しようとしています:

ORGPATHTXT
2123/2322/12323/111/222/333/3822

を使用する必要があると思いselect substringますが、クエリのフォーマット方法がわかりません

4

6 に答える 6

2

SQLServerを想定

私が考える最も簡単な方法は、「/」に基づいて分割する分割関数を作成し、以下のように6番目の項目を抽出することです。

declare @text varchar(50) = '2123/2322/12323/111/222/333/3822'

select txt_value from fn_ParseText2Table(@text, '/') t where t.Position = 6

このURLの関数を使用しました。SQLFiddleで機能したことを確認してください

于 2013-01-31T22:10:16.037 に答える
2

これを試してください -選択クエリで使用する文字列variable またはラップに( Sql-Demo )function

Declare @s varchar(50)='2123/2322/12323/111/222/333/3822'

Select @s = right(@s,len(@s)- case charindex('/',@s,1) when 0 then len(@s) 
                              else charindex('/',@s,1) end)
From ( values (1),(2),(3),(4),(5)) As t(num)

Select case when charindex('/',@s,1)>0 then left(@s,charindex('/',@s,1)-1) 
            else @s end

--Results
333
于 2013-01-31T22:30:10.780 に答える
1

CROSS APPLYMSSQLで区切られた文字列を分割しROW_NUMBER()、6番目の要素を返すために使用するソリューションを提供したいと思います。これは、フィールドとしてORGPATHTXTを含むテーブルがあることを前提としています(ただし、テーブルがなくても簡単に機能するように変換できます)。

SELECT ORGPATHTXT
FROM (
  SELECT 
    Split.a.value('.', 'VARCHAR(100)') AS ORGPATHTXT,
    ROW_NUMBER() OVER (PARTITION BY ID ORDER BY (SELECT 1)) RN
  FROM  
    (SELECT ID, CAST ('<M>' + REPLACE(ORGPATHTXT, '/', '</M><M>') + '</M>' AS XML) AS String  
     FROM  MyTable
  ) AS A 
  CROSS APPLY String.nodes ('/M') AS Split(a)
  ) t 
WHERE t.RN = 6;

これは、それに伴うフィドルのサンプルです。

幸運を。

于 2013-02-01T01:11:53.980 に答える
1

SQLの場合、使用できます

declare @string varchar(65) = '2123/2322/12323/111/222/333/3822'

select substring(string,25,27) from table_name 
于 2013-02-01T04:26:07.303 に答える
0

また、動的管理機能sys.dm_fts_parserでオプションを使用できます。

DECLARE @s nvarchar(50) = '2123/2322/12323/111/222/333/3822' 

SELECT display_term
FROM sys.dm_fts_parser('"'+ @s + '"', 1033, NULL, 0) 
WHERE display_term NOT LIKE 'nn%' AND occurrence = 6
于 2013-02-01T16:58:29.087 に答える
0

MySQL を使用している場合は、次を使用できます。

select substring_index(orgpathtxt, '/', 6)

他のほとんどのデータベースではあまり便利ではないとだけ言っておきましょう。

于 2013-01-31T22:09:53.343 に答える