[SQLServer] SQLServerでSplitを実装!

公開日: : DB, SQL

SQLServerでSplitを実装してみます。

最新のSQLServerには組み込み関数があるらしいですが、

わたしの使っているバージョンにはない!です。

元々、IPアドレスをSplitしたい案件があり、その過程で作成したものです。

http://stackoverflow.com/questions/10581772/how-to-split-a-comma-separated-value-to-columns

こちらを丸パクリしていますが、バグっていたので修正。(コメントアウトのところ)

※IPアドレス中に同じ”数値+Delimiter”が2つ含まれていると、Replaceで二つ変換されてバグる。

IPアドレス以外を扱うときは、Delimiterの'.'を別なのに差し替えてください。

CREATE FUNCTION [dbo].[SplitIP]
(
  @multiwordstring VARCHAR(255),
  @wordnumber      NUMERIC
)
returns VARCHAR(255)
AS
  BEGIN
      DECLARE @remainingstring VARCHAR(255)
      SET @remainingstring=@multiwordstring

      DECLARE @numberofwords NUMERIC
      SET @numberofwords=(LEN(@remainingstring) - LEN(REPLACE(@remainingstring, '.', '')) + 1)

      DECLARE @word VARCHAR(50)
      DECLARE @parsedwords TABLE
      (
         line NUMERIC IDENTITY(1, 1),
         word VARCHAR(255)
      )

      WHILE @numberofwords > 1
        BEGIN
            SET @word=LEFT(@remainingstring, CHARINDEX('.', @remainingstring) - 1)

            INSERT INTO @parsedwords(word)
            SELECT @word

--            SET @remainingstring= REPLACE(@remainingstring, Concat(@word, '.'), '')
			SET @remainingstring=substring(@remainingstring, CHARINDEX('.', @remainingstring)+1, len(@remainingstring))
            SET @numberofwords=(LEN(@remainingstring) - LEN(REPLACE(@remainingstring, '.', '')) + 1)

            IF @numberofwords = 1
              BREAK

            ELSE
              CONTINUE
        END

      IF @numberofwords = 1
        SELECT @word = @remainingstring
      INSERT INTO @parsedwords(word)
      SELECT @word

      RETURN
        (SELECT word
         FROM   @parsedwords
         WHERE  line = @wordnumber)

  END;
GO

スポンサードリンク

関連記事

no image

[SQL] primary keyの追加・削除

テーブル作成後にprimary keyを付与する方法です。 ALTER TABLE テーブ

記事を読む

no image

[PostgreSQL] よく使う基本コマンド

PostgreSQLでpsqlのコマンド入力をする場合の一般的SQL以外のコマンドを列挙します。

記事を読む

no image

[SQL] 割合を計算するときの定石(割られる数をCASTする)

なんとか率などの割合を計算するときのメモ。 割られるほうの数値を浮動小数点にCASTする 割られ

記事を読む

no image

[SQL] case when文

select結果を条件で振り分けるSQL 通常はjoinとかwhere句で振り分けたりしますが

記事を読む

no image

[SQL][集計関数] 行数をカウントするcount関数の解説

count関数について説明します。 count関数は、グループ化した単位での件数をカウントしま

記事を読む

no image

[SQL] 副問い合わせのin句に指定できるワードの数について

副問い合わせのin句に指定できるワードの数について ●Oracle 1000個が上限のようで

記事を読む

no image

[PostgreSQL][SQL] 文字列関連

PostgreSQLで文字列の処理をしたい場合のTipsをご紹介します。 ①文字列連結

記事を読む

no image

[PostgreSQL] csvでSQL結果を出力する方法(psqlコマンド)

SQLエディタ、接続ツールなどを使うと簡単に行える CSVファイルでの出力 について、コ

記事を読む

no image

[SQLServer] 当日0時や月初0時の取得方法

当日0時や月初0時の取得方法です。 当日0時 DATEADD関数の2番目の引数にDATEDI

記事を読む

no image

[PostgreSQL][SQL] 日付関連

●interval tbl_Aから、tbl_Bの日付で7日前~現在に当てはまるレコードを抽出す

記事を読む

スポンサードリンク

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

スポンサードリンク

no image
[Re:dash] BigQuery接続で日本語タイトルを出す(v2.0.0)

BigQueryは現在マルチバイトを含むSQLを発行することができない

no image
[Python] Nullの判定方法(None)

Nullの判定方法(None) 表記方法 Pythonでは、Nul

no image
[Python] 型の検査・判定

Pythonでの型の検査・判定方法 isinstance サン

no image
[python] 日付の取り扱い(datetime) 現在日付、計算、文字列変換(format)

現在日付 日付の計算 [crayon-5a0fd0d32968

no image
[python] 文字列結合

pythonでの文字列結合 サンプル

→もっと見る

  • 2017年11月
    « 10月    
     12345
    6789101112
    13141516171819
    20212223242526
    27282930  
  • 2017年11月
    « 10月    
     12345
    6789101112
    13141516171819
    20212223242526
    27282930  
PAGE TOP ↑