次の列の 6 番目のフィールドから値を取得するにはどうすればよいですか? 333 フィールドを取得しようとしています:
ORGPATHTXT
2123/2322/12323/111/222/333/3822
を使用する必要があると思いselect substring
ますが、クエリのフォーマット方法がわかりません
次の列の 6 番目のフィールドから値を取得するにはどうすればよいですか? 333 フィールドを取得しようとしています:
ORGPATHTXT
2123/2322/12323/111/222/333/3822
を使用する必要があると思いselect substring
ますが、クエリのフォーマット方法がわかりません
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で機能したことを確認してください
これを試してください -選択クエリで使用する文字列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
CROSS APPLY
MSSQLで区切られた文字列を分割し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;
これは、それに伴うフィドルのサンプルです。
幸運を。
SQLの場合、使用できます
declare @string varchar(65) = '2123/2322/12323/111/222/333/3822'
select substring(string,25,27) from table_name
また、動的管理機能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
MySQL を使用している場合は、次を使用できます。
select substring_index(orgpathtxt, '/', 6)
他のほとんどのデータベースではあまり便利ではないとだけ言っておきましょう。