Template
の文字列からn桁の数字を削除しようとしています。結果はREPLACE関数内の正規表現パターン
ABC
ABC_XYZ
です。ただし、REPLACEは正規表現を読み取ることができません。私はSQLSERVER 2008を使用しています。ここで何か間違っていますか?助言がありますか?
Template
の文字列からn桁の数字を削除しようとしています。結果はREPLACE関数内の正規表現パターン
ABC
ABC_XYZ
です。ただし、REPLACEは正規表現を読み取ることができません。私はSQLSERVER 2008を使用しています。ここで何か間違っていますか?助言がありますか?
SELECT SUBSTRING('ABCTemplate1', 1, CHARINDEX('Template','ABCTemplate1')-1)
又はより一般
SELECT SUBSTRING('ABC_XYZTemplate21',1,PATINDEX('%Template[0-9]%','ABC_XYZTemplate21')-1)
、
SELECT SUBSTRING(column_name,1,PATINDEX('%Template[0-9]%',column_name)-1)
FROM sometable
WHERE PATINDEX('%Template[0-9]%',column_name) > 0
探しているパターンが修正されている場合はsubstring
とcharindex
またはpatindex
を使用できます。
用い番号テーブル..
;with cte
as
(select 'ABCTemplate1' as string--this can simulate your table column
)
select * from cte c
cross apply
(
select replace('ABCTemplate1','template'+cast(n as varchar(2)),'') as rplcd
from
numbers
where n<=9
)
b
where c.string<>b.rplcd
再帰CTEを使用..
;with cte
as
(
select cast(replace('ABCTemplate21','template','') as varchar(100)) as string,0 as num
union all
select cast(replace(string,cast(num as varchar(2)),'') as varchar(100)),num+1
from cte
where num<=9
)
select top 1 string from cte
order by num desc
select SUBSTRING('ABCTemplate1',1, CHARINDEX ('Template' ,'ABCTemplate1')-1)
私の答えは、「テンプレート」はどこの文字列をカットするかを決定するのに十分であることを期待:
select LEFT('ABCTemplate1', CHARINDEX('Template', 'ABCTemplate1') - 1)
の可能性のある重複した[SQL内の正規表現パターンの機能を置き換えますか?](http://stackoverflow.com/questions/21378193/regex-pattern-inside-sql-replace-function) – Siyual
それはあまりにもテンプレートの後ろですか? –
はい@アレックス。 'Template'という単語を含むもの、それに続くもの(数字のみ)。 – SohamC