[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] 割合を計算するときの定石(割られる数をCASTする)

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

記事を読む

no image

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

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

記事を読む

no image

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

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

記事を読む

no image

[PostgreSQL][SQL] csvファイルのインポート

PostgreSQLでcsvファイルをインポートする際の方法を解説します。 例題として、以下の

記事を読む

no image

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

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

記事を読む

no image

[PostgreSQL][SQL] 日付関連

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

記事を読む

no image

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

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

記事を読む

no image

[SQL] primary keyの追加・削除

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

記事を読む

no image

[SQLServer] 日付の加算・減算

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

記事を読む

no image

[PostgreSQL][SQL] 文字列関連

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

記事を読む

スポンサードリンク

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
[Windowsバッチ] 日付文字列(YYYYMMDD)の作成

Windowsバッチでの日付文字列(YYYYMMDD)の作り方 日付

no image
[PHP] 日付・日時の作成(DateTimeクラス)

現在日時の作成 サンプル $date = new DateTi

no image
[PHP] 文字列の連結

PHPでの文字列の連結 PHPでの文字列連結は 「.」(ドット)で行

no image
[PHP] 文字列の切り取り(substr)

PHPでの文字列切り取り substr substr関数は、文字列

no image
[PHP] 文字列の分割(explode)

PHPでの文字列分割 explode 現在、splitは非推奨なの

→もっと見る

  • 2017年6月
    « 3月    
     1234
    567891011
    12131415161718
    19202122232425
    2627282930  
PAGE TOP ↑