フィールドの末尾の空白を除去する - TRIM() 関数の利用
SQL ServerでTRIM()関数を利用し、フィールドの末尾の空白を除去するコードを紹介します。
概要
TRIM()関数を利用すると、文字列の先頭、末尾の空白を除去できます。TRIM()関数を利用することで、プログラム側で処理していた空白の除去をSQLで処理できます。
書式
TRIM関数は下記の書式となります。
TRIM()関数に与えた引数の文字列の前後の空白を除去した文字列を返します。
実行例
例1
select TRIM('ペンギン ');
の結果は下記となります。
ペンギン
例2
select TRIM(' らくだ ');
の結果は下記となります。
らくだ
Trim関数を利用しない場合の動作
Trim関数を利用しない場合の動作を確認します。
下記のテーブルを作成します。
Productsテーブル
model (nchar(64) |
C-XM01 |
X-XD05 |
A-DA40 |
O-XX100 |
R-D400 |
R7000 |
B-200 |
B-250 |
W-80 |
EG-10X |
UI
Windowsフォームアプリケーションを作成し、下図のUIを作成します。
コード
下記のコードを作成します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.Sql;
using System.Data.SqlClient;
namespace SQLExecDemo
{
public partial class FormSQLExec : Form
{
public FormSQLExec()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string constr = @"Data Source=192.168.0.1;Initial Catalog=iPentecSandBox;Connect Timeout=60;Persist Security Info=True;User ID=penguin;Password=toboggan";
SqlConnection con = new SqlConnection(constr);
con.Open();
try {
string sqlstr = "select model from Products";
SqlCommand com = new SqlCommand(sqlstr, con);
SqlDataReader sdr = com.ExecuteReader();
while (sdr.Read() == true) {
string model = (string)sdr["model"];
textBox2.Text += string.Format("\"{0}\"\r\n", model);
}
}
finally {
con.Close();
}
}
}
}
解説
データベースに接続し、Productsテーブルのレコードをすべて取得します。取得したレコードのmodelフィールドの値をテキストボックスに出力します。
実行結果
プロジェクトを実行します。下図のウィンドウが表示されます。
ボタンをクリックします。下図の画面が表示されます。Productsテーブルのレコードが取得されmodelフィールドの値が表示されます。フィールドはnchar(64)で定義されているため、取得されたmodelの値の後ろには空白文字を含んでいます。
対処法
プログラムで扱うには、末尾の空白を除去したほうが扱いやすいです。
末尾の空白を除去するには、SqlDataReaderから呼び出した際にstringオブジェクトのtirm()メソッドを呼び出すことで空白を除去できます。
while (sdr.Read() == true) {
string model = ((string)sdr["model"]).Trim();
textBox1.Text += string.Format("\"{0}\"\r\n", model);
}
Trim関数を利用した空白の除去
先のコードでフィールドの末尾の空白を除去できますが、SQLのTRIM()関数を利用すると、SQL文中の記述で対応でき、プログラムでのロジックを記述する必要がなくなります。
プログラムを実行すると、末尾の空白が除去された値が出力されます。
コード
先のプログラムのコードを下記に変更します。SQL文の変更になります。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.Sql;
using System.Data.SqlClient;
namespace SQLExecDemo
{
public partial class FormSQLExec : Form
{
public FormSQLExec()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string constr = @"Data Source=192.168.0.1;Initial Catalog=iPentecSandBox;Connect Timeout=60;Persist Security Info=True;User ID=penguin;Password=toboggan";
SqlConnection con = new SqlConnection(constr);
con.Open();
try {
string sqlstr = "select TRIM(model) as model from Products";
SqlCommand com = new SqlCommand(sqlstr, con);
SqlDataReader sdr = com.ExecuteReader();
while (sdr.Read() == true) {
string model = (string)sdr["model"];
textBox1.Text += string.Format("\"{0}\"\r\n", model);
}
}
finally {
con.Close();
}
}
}
}
解説
下記のSQLを実行します。
select TRIM(model) as model from Products
TRIM(model)
により、selectで取得されるmodelの値の空白を除去します。TRIM()関数で返された値は列名が
(なし)
になってしまうため、
as
キーワードを利用して列名を設定しています。今回の例では元の列名と同じ
model
に指定しています。
実行結果
プロジェクトを実行し、表示されたフォームのボタンをクリックします。下図の画面が表示されます。TRIM()関数により空白が除去された値がテキストボックスに表示されます。
著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。