- PR -

SUBSTRINGについて

1
投稿者投稿内容
Yoko
常連さん
会議室デビュー日: 2004/11/16
投稿数: 20
投稿日時: 2006-07-06 09:32
いつもお世話になっております。

DBはSQL SERVER2005 を使用しています。

文字列の抽出関数SUBSTRINGについて質問させてください。
以下のようなクエリを書きました。

DECLARE @str_zenkaku VARCHAR(20)
DECLARE @str_hankaku VARCHAR(20)
SET @str_zenkaku = 'ABCDE'
SET @str_hankaku = 'abcde'

PRINT SUBSTRING(@str_zenkaku, 1, 5 ) ・・・A
PRINT SUBSTRING(@str_hankaku, 1, 5 ) ・・・B
PRINT SUBSTRING(@str_zenkaku, 6, 5 ) ・・・C
PRINT SUBSTRING(@str_hankaku, 6, 5 ) ・・・D


結果は
A→ABCDE
B→abcde
C→NULLで帰ってくる
D→NULLではないが空白で帰ってくる

です。
CとDの違いはなんなのでしょうか?

ちなみに、なぜこんなことをしているかというと、、、
全部で10文字入力可能のカラムを
前半5文字と後半5文字に分けて返すようなことをしたくて
試していて、疑問に思いました。

よろしくお願いします。



ue
ぬし
会議室デビュー日: 2005/05/07
投稿数: 581
お住まい・勤務地: 広島市
投稿日時: 2006-07-06 11:51
こんにちは。

深いところは分からないですが、SUBSTRING 関数の第一引数(expression) に与える値が Unicode 文字列かどうかで決まるのではないでしょうか。
既定のコードページの文字列を渡すと null が返りますね。

コード:
DECLARE @str_zenkaku VARCHAR(20)
DECLARE @str_hankaku VARCHAR(20)
SET @str_zenkaku = 'ABCDE'
SET @str_hankaku = 'abcde'

PRINT N'A:' + SUBSTRING(@str_zenkaku, 1, 5 )
PRINT N'B:' + SUBSTRING(@str_hankaku, 1, 5 )
PRINT N'C:' + ISNULL(SUBSTRING(@str_zenkaku, 6, 5 ), N'null')
PRINT N'D:' + ISNULL(SUBSTRING(@str_hankaku, 6, 5 ), N'null')


結果
A:ABCDE
B:abcde
C:null
D:

コード:
DECLARE @str_zenkaku NVARCHAR(20)
DECLARE @str_hankaku NVARCHAR(20)
SET @str_zenkaku = N'ABCDE'
SET @str_hankaku = N'abcde'

PRINT N'A:' + SUBSTRING(@str_zenkaku, 1, 5 )
PRINT N'B:' + SUBSTRING(@str_hankaku, 1, 5 )
PRINT N'C:' + ISNULL(SUBSTRING(@str_zenkaku, 6, 5 ), N'null')
PRINT N'D:' + ISNULL(SUBSTRING(@str_hankaku, 6, 5 ), N'null')


結果
A:ABCDE
B:abcde
C:
D:

_________________
上本亮介 (ue) @ わんくま同盟
Microsoft MVP for VSTO (Jul 2008 - Jun 2009)
Hello Another World!
.NET 勉強会 / ヒーロー島
1

スキルアップ/キャリアアップ(JOB@IT)