文字列の最初の文字とその文字列内の特定の文字が現れるたびに最初の文字を含む文字列を作成しようとしています。たとえば、 '。' 'Hello.Bye.Today.Yesterday'は 'HBTY'を返します。私がこれまで持って何文字列内の特定の文字が出現するたびに最初の文字を選択します。
:
SELECT substring(Hello.Bye.Today.Yesterday, 1,1)
文字列の最初の文字とその文字列内の特定の文字が現れるたびに最初の文字を含む文字列を作成しようとしています。たとえば、 '。' 'Hello.Bye.Today.Yesterday'は 'HBTY'を返します。私がこれまで持って何文字列内の特定の文字が出現するたびに最初の文字を選択します。
:
SELECT substring(Hello.Bye.Today.Yesterday, 1,1)
あなたはこのためにSQLを使用したい場合は、以下のロジックで関数を作成
DECLARE @value VARCHAR(255)
SET @value = 'Hello.Bye.Today.Yesterday'
DECLARE @result VARCHAR(255)
DECLARE @curChar CHAR(1)
DECLARE @start INT, @end INT
SET @start = 2
SET @end = LEN(@value)
SET @result = SUBSTRING(@value, 1,1)
WHILE @start < @end
BEGIN
SET @curChar = SUBSTRING(@value, @start, 1)
IF @curChar = '.'
BEGIN
SET @result = @result + SUBSTRING(@value, @start + 1, 1)
SET @start = @start + 1
END
SET @start = @start + 1
END
結果
HBTY
あなたの場合はデータベースはINSTR()関数をサポートしていますが、これはうまくいきます。しかし、Gordon Linoff氏によると、リレーショナルデータベースのこのタイプの活動には限界があります。ご覧のとおり、あなたはハード配線する必要があります:「」
そう簡単ではない...
-- use '+' instead of '||' in SQL Server
WITH
input(s) AS (SELECT 'Hello.Bye.Today.Yesterday')
SELECT
SUBSTR(s,1,1)
||SUBSTR(s,INSTR(s,'.',1,1)+1,1)
||SUBSTR(s,INSTR(s,'.',1,2)+1,1)
||SUBSTR(s,INSTR(s,'.',1,3)+1,1)
AS the_string
FROM input;
the_string
HBTY
だから、連結する最初の文字のための例外的な行動を持っています。その後、適切な時点でSUBSTR(s,INSTR(s,'.',1,<n>)+1,1)
に行くことをやめなければならないので、事前にどのくらいの頻度で 'を知る必要があります。'文字列内で発生します。 のは、我々は終わりを越え1を行けば何が起こるか見てみましょう:
WITH
input(s) AS (SELECT 'Hello.Bye.Today.Yesterday')
SELECT
SUBSTR(s,1,1)
||SUBSTR(s,INSTR(s,'.',1,1)+1,1)
||SUBSTR(s,INSTR(s,'.',1,2)+1,1)
||SUBSTR(s,INSTR(s,'.',1,3)+1,1)
||SUBSTR(s,INSTR(s,'.',1,4)+1,1) -- there is no 4th '.'
||SUBSTR(s,INSTR(s,'.',1,5)+1,1) -- there is no 5th '.'
AS the_string
FROM input;
the_string
HBTYHH
だから、INSTRは()、その後、0を返し、あなたは文字列の最初の文字を毎回取得します。その場合、CASE WHEN式を使用してコードを「装飾」する必要があります。
あなたはすでにどのようなコードをお持ちですか? –
まず、これはSQLのタスクではないため、データベースは最適なツールではありません。次に、使用しているデータベースで質問にタグを付ける必要があります。 –
もしあなたがCの中で 'split'を知っているなら# – LONG