[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

[PostgreSQL][SQL] 文字列関連

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

記事を読む

no image

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

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

記事を読む

no image

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

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

記事を読む

no image

[PostgreSQL][SQL] 日付関連

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

記事を読む

no image

[RDB][SQL] JOINについて

JOINについて説明します。 まず、以下の2つのテーブルがあります。 簡単なテーブルなので、

記事を読む

no image

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

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

記事を読む

no image

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

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

記事を読む

no image

[SQLServer] 日付の加算・減算

SQLServerでの日付の加算・減算方法をまとめます。 現在時刻の取得方法 現在時刻は「GET

記事を読む

no image

[SQL] case when文

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

記事を読む

no image

[SQL] primary keyの追加・削除

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

記事を読む

スポンサードリンク

Message

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

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <img localsrc="" alt="">

スポンサードリンク

no image
[SQLServer] SQLServerでSplitを実装!

SQLServerでSplitを実装してみます。 最新のSQLS

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

当日0時や月初0時の取得方法です。 当日0時 DATEADD関

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

SQLエディタ、接続ツールなどを使うと簡単に行える CSVファイ

no image
[bash] ファイルの中身を1行ずつ処理するループ処理(while文)

ファイルの中身を1行ずつ処理したい場合の処理です。 ファイル名を

no image
[bash] grep・egrepコマンド

基本パターン ファイル中の文字列を検索 $ grep '[検索

→もっと見る

  • 2017年5月
    « 3月    
    1234567
    891011121314
    15161718192021
    22232425262728
    293031  
PAGE TOP ↑