@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

SQLServer2000のcharindex関数にバグあり?

1
投稿者投稿内容
maru
ぬし
会議室デビュー日: 2003/01/27
投稿数: 412
投稿日時: 2004-04-23 18:18
いつもお世話になってます。

今、SQL Server 2000 standerdでアプリケーション開発していますが、
charindex関数が不可解な動きをします。

' 01' 〜 ' 50'(空白2つにゼロ付2桁数値の連続)の文字列の中から、
' 01'などの文字列の位置をcharindex関数を使ってとろうとしています。

例)
select charindex(' 02',' 01 02 03 04 05 06 07 08 09 10',1)

で、' 01'は当然文字位置として1が帰ってきますが、' 02'以降は文字位置がずれて
返ってきます。本来、' 02'の文字位置は5のはずですが、結果は4となります。

ためしに空白を'A'などで埋めてテストしてみましたが、文字位置は変わらないはずなのに
結果は正しく5と返ってきました。
これはバグでしょうか?何かご存知の方おられませんか?
いのつち
ベテラン
会議室デビュー日: 2002/05/14
投稿数: 73
投稿日時: 2004-04-23 18:42
コード:
select charindex(' 02',' 01 02 03 04 05 06 07 08 09 10',1) 
                 --


スペースが入っていません?
コード:
select charindex(' 02',' 01 02 03 04 05 06 07 08 09 10',1) 
                  ---      ---
                        1234

maru
ぬし
会議室デビュー日: 2003/01/27
投稿数: 412
投稿日時: 2004-04-23 21:51
いろんなパターンで試してみましたが、空白とかの問題ではなさそうでした。

お手数ですが、クエリアナライザで流してみてもらえませんか?
なんか気持ち悪いの私だけ?

select 'TEST1', charindex('AA01','AA01AA02AA03',1) --←1が正解。これはOK
select 'TEST2', charindex('AA02','A01AA02AA03',1) --←4が正解。これもOK
select 'TEST3', charindex('AA02','AA01AA02AA03',1) --←5が正解?なのに4が返る
select 'TEST4', charindex('AA02','AAA01AA02AA03',1) --←6が正解?なのに5が返る
select 'TEST5', charindex('AA02','AAAA01AA02AA03',1) --←7が正解?なのに6が返る
select 'TEST6', charindex('AA02','AA01AAA02AA03',1) --←6が正解?なのに7が返る
select 'TEST7', charindex('A02','AA01AA02AA03',1) --←6が正解。これもOK



[ メッセージ編集済み 編集者: maru 編集日時 2004-04-23 22:13 ]
おさるさん
常連さん
会議室デビュー日: 2004/01/05
投稿数: 24
投稿日時: 2004-04-24 10:45
引用:

投稿日時: 2004-04-23 21:51 maruサンの書き込みより
------------------------------------------------------------
お手数ですが、クエリアナライザで流してみてもらえませんか?
なんか気持ち悪いの私だけ?





SQL 2000 Serverで試すと全て正解が帰ってきます。
SQL 7.0 Serverで試すと仰るとおりの結果が出ます。
やはり、7.0のバグかな。
MSらしく知らん顔して新バージョンでバグフィクスかな?
おさるさん
常連さん
会議室デビュー日: 2004/01/05
投稿数: 24
投稿日時: 2004-04-24 11:05
すみません。

ちなみにSQL2000,SQL7.0共にEnterprise Editionでした。
いのつち
ベテラン
会議室デビュー日: 2002/05/14
投稿数: 73
投稿日時: 2004-04-24 11:11
Microsoft SQL Server 2000 - 8.00.818 (Intel X86)
May 31 2003 16:08:15
Copyright (c) 1988-2003 Microsoft Corporation
Developer Edition on Windows NT 5.0 (Build 2195: Service Pack 4)

Microsoft SQL Server 2000 - 8.00.760 (Intel X86)
Dec 17 2002 14:22:05
Copyright (c) 1988-2003 Microsoft Corporation
Desktop Engine on Windows NT 5.0 (Build 2195: Service Pack 4)

Microsoft SQL Server 2000 - 8.00.818 (Intel X86)
May 31 2003 16:08:15
Copyright (c) 1988-2003 Microsoft Corporation
Standard Edition on Windows NT 5.2 (Build 3790: )

上記3つは正常。

Microsoft SQL Server 2000 - 8.00.194 (Intel X86)
Aug 6 2000 00:57:48
Copyright (c) 1988-2000 Microsoft Corporation
Developer Edition on Windows NT 5.0 (Build 2195: Service Pack 4)

製品版(サービスパックなし)では同様の結果でした。
バグっぽいですね。

* SPのあたっていない開発用サーバを見つけてしまった(苦笑)

[FIX] 組み込みの文字列関数が間違った結果を返す
http://support.microsoft.com/default.aspx?scid=kb;ja;308113&Product=sqlserverJPN

*サポート情報のURLを追記



[ メッセージ編集済み 編集者: いのつち 編集日時 2004-04-24 11:19 ]
maru
ぬし
会議室デビュー日: 2003/01/27
投稿数: 412
投稿日時: 2004-04-26 10:54
こんにちは。
sp3を適用したら正しく処理されるようになりました。
お騒がせしました。
1

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