2017-07-03 8 views
0

列からテキストを抽出し、それを独自の列に配置したいとします。列からテキストを抽出して新しい列にコピーする

テキストは、DD/MM/YYYY HH:MM形式では常に16文字で、「オンサイト」というテキストが表示され、テキストには1度しか表示されず、常に「オフサイトそれはまた一度しか現れない。

これは私が現時点で使用しているコードですが、まったく設定していません。

WITH 
    LEFT(SUBSTRING(eventcomments, 
        CHARINDEX('On-Site', r.eventcomments) + 1, 16), 
        CHARINDEX('Off-Site', r.eventcomments) - 1) AS Onsite 

このエラーメッセージが表示されます。

Invalid length parameter passed to the LEFT or SUBSTRING function. 
+0

サンプルデータと予期した結果を投稿できますか? –

+0

ここにレイアウトする方法がわかりません。テキストがある列は非常に大きいです。 – Michael

答えて

0

Iは、私はこのようPATINDEX代わりにCHARINDEXを使用し、次の形式DD/MM/YYYY HH:SS(長さ= 16文字)を持つ日付/時刻値のストリング列最初の発生から抽出しなければならないと仮定すると:

SELECT *, 
    SUBSTRING(
     x.StringColumn, 
     NULLIF(PATINDEX('%[0-1][0-9]/[0-3][0-9]/[0-9][0-9][0-9][0-9][ ][0-9][0-9]:[0-9][0-9]%', x.StringColumn), 0), 
     16) AS DateTimeExtracted 
FROM (VALUES 
    ('Bogdanel 01/02/2017 03:04 hei ho'), 
    ('Georgel 05/06/2017 07:08 danga langa'), 
    ('Suna''n asfintit 09/11/2018 11:22 hei talanga'), 
    ('Danga langa. Pai da.'), 
    (' '), 
    (NULL) 
) x(StringColumn) 

結果:

StringColumn         DateTimeExtracted 
-------------------------------------------- ----------------- 
Bogdanel 01/02/2017 03:04 hei ho    01/02/2017 03:04 
Georgel 05/06/2017 07:08 danga langa   05/06/2017 07:08 
Suna'n asfintit 09/11/2018 11:22 hei talanga 09/11/2018 11:22 
Danga langa. Pai da.       NULL 
              NULL 
NULL           NULL 
+0

ありがとう、これは私のために動作します。 (新しい列の下で)2番目の日付/時刻値を見つける必要がある場合は、複製することができます – Michael

+0

@Michael:可能ですが、2番目または3番目のオカレンスについての質問はありません。この要件を追加し、ソース文字列の例をいくつか追加して、現在の質問を更新する必要があります。 –

+0

あなたは正しいです、私は興奮して謝罪!あなたは私が完全に求めていることすべてをやった。ありがとうございました。 – Michael

0

これは値がフィールドにないために発生します。簡単な方法は、ちょうどcharindex()のためにそれらを追加します。

LEFT(SUBSTRING(eventcomments, 
       CHARINDEX('On-Site', r.eventcomments + 'On-Site') + 1, 16), 
     CHARINDEX('Off-Site', r.eventcomments + 'Off-Site') - 1 
    ) AS Onsite 

あなたはそれが何をしたいんかどうかを確認するためにコードをテストする必要があります。この方法は、エラーを防止します。

関連する問題