
こんにちは。
当方、Linux7.3+アプリケーション(DB:Informix)を使用しています。
文字列を数値に変換するSQLに悩まされています。
内容
01/01/08からなる文字列と20080101と手動入力される数値を比較する事が最終目標です。
当方が試みている方向は、
01/01/08をSUBSTRING()で20080101に成型し、数値比較をしたい、と思っています。
SUBSTRING()で、文字列型で20080101までできるのですが、数値型にCASTが出来ません。
検討した関数は、下記の通りですが、構文エラーとなり、実装できません。
お助け下さい。
CAST(20080101) as INTEGER
TO_NUMBER(20080101)
INT(20080101)
CONVERT(20080101)
No.7ベストアンサー
- 回答日時:
もひとつ補足で質問です。
どんなやり方でSQLを実行したのでしょうか?
( dbaccess ? , isql ?, C , jdbc ... ? )
この回答への補足
無事に結果が出ました。
皆様、本当に有難うございました。
どうやらcol[1]に'0'が入っている場合に直に数値変換すると、
一桁ずれ、'/'を数値変換しようとする為、
数値変換エラーとなる模様です。
ですので、べたですが、col[1]に'0'が入っている場合も
数値'0'として、変換するように配慮する事で、
実行する事が出来ました。
それでは、良い週末を。
回答、有難うございます。
少々、気づいた点があり、調査してみました。
まず、dbaccessからはCREATEできませんでしたが、
dbaccessのCREATEツールから、コメント通りのテーブルを作り、
INSERT→SELECTと結合する文字列を順に増やし、実行確認しました。
1.WHERE '20'||col1[7,8] = 2008
は問題なく結果が帰ってきます。
2.WHERE '20'||col1[7,8]||col1[1,2] = 200801
は、数値変換エラーとなります。
3.WHERE '20'||col1[7,8]||col1[4,5] = 200801
は問題なく結果が帰ってきます。
4.col1[1,2]に数値となれるデータ以外は入っていません。
'01'~'12'までしか入っていません。
んー。
もう少しのような気がします。
No.5
- 回答日時:
Informix のバージョンが不明ですが、Linux 7.3 とあったので、V7 でしょうか?
Informix V7 だと、明示的なCAST はできないと思いますが、それでも文字列と数値の比較であれば、普通に = などで比較すれば暗黙のキャストが行なわれるのでは?
こんなSQL で検索できるようですが。。。
create table testtbl
(
col1 char(20),
col2 integer
);
insert into testtbl values ( '01/01/08', 20080101 );
insert into testtbl values ( '09/03/08', 20080101 );
select '20' || col1[7,8] || col1[1,2] || col1[4,5], col2 from testtbl
where '20' || col1[7,8] || col1[1,2] || col1[4,5] = col2;
回答、有難うございます。
早速、チェックしましたが、上記の結果と同じく、
文字列から数値変換エラーと表示し、実行出来ません。
明示・暗黙ともに実行不可能といった状況です。
どのような事でも結構です。
気付かれた点のコメントをお願いします。
No.4
- 回答日時:
CAST('20080101' as DECIMAL)
では、いかがですか?
20080101 は、INTは無理でしょう。
回答、有難うございます。
コメントの通り、'20080101'という文字列を数値型に変換する点は、
DECIMALで実行出来ています。
しかしながら、'20080101'に成型する為に、「SUBSTRING」や「colums[7,8]」等の文字列操作関数や任意抽出を使用せざるを得ず、関数使用し、成型した後の数値変換が出来ない状態です。
引き続き、アドバイスをお願いします。
No.3
- 回答日時:
> insert into test ( '01/01/08' )
は insert into test values ( '01/01/08' ) の間違いでした。すみません。
しかし、かなり厳しいですね。
informixに接続しているプログラミング言語は何ですか。
場合によっては、言語側で入力された数値を文字列変換できるかもしれません。
後、最後の未練ですが、
select cast( '20' || col1[7,8] || col1[1,2] || col1[4,5] as decimal(13,0) )
from test
を試してみてください。
回答、有難うございます。
Informixに接続している言語は、恥ずかしながら不明です。
確かにバッチ処理で使用しているAWKプログラムでは、
文字列から数値変換は出来ているのですが、
今回の要望がUI画面からの操作であり、Informix-SQLの柔軟性に困っています。
尚、DECIMALでもダメでした…。
No.2
- 回答日時:
お使いのinformixのバージョンは?
create table test
(
col1 char(20)
)
insert into test ( '01/01/08' )
select cast( '20' || col1[7,8] || col1[1,2] || col1[4,5] as int8 )
from test
でも駄目ですか?
回答、有難うございます。
早速、試しましたが、「文字列から数値変換失敗」と表記され、実行出来ませんでした。
通常のInformixであれば、アドバイスの通り、明示的CASTで実行可能なでしょうが、当方の環境はLinux上のパッケージソフト内に同梱されているInformixなので、MSDEのようなエンジン的な機能しか無いのかも知れません…。
何とかしたいのですが、助けて下さい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQL 外部結合についての質問
-
LEFT JOINの条件式で=’’を使用...
-
エラー2「無効な識別子です」
-
自己相関サブクエリと自己結合...
-
関係演算子が無効です。
-
ADO VBA 実行時エラー3021
-
Oracleでの文字列連結サイズの上限
-
OracleのSQL*PLUSで、デー...
-
GROUP BYを行った後に結合した...
-
select句副問い合わせ 値の個...
-
ACCESSの集計クエリで3件ある...
-
使うべきでない文字。
-
Accessで別テーブルの値をフォ...
-
postgresql DELETE後commit...
-
Excelでセルの書式設定を使用し...
-
割合(パーセント)を求めるに...
-
沿線コード
-
MERGE文を単体テーブルに対して...
-
抽出したデータを修正して元の...
-
固定値を含む結合と複数テーブ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQL 外部結合についての質問
-
関係演算子が無効です。
-
エラー2「無効な識別子です」
-
エラー「無効な識別子です」
-
自己相関サブクエリと自己結合...
-
LEFT JOINの条件式で=’’を使用...
-
SQLで後方の文字列を置換する方法
-
TO_CHAR関数における外部結合に...
-
【修正希望】【マクロ】元デー...
-
パフォーマンスを考慮したSQL文...
-
range表記をcells表記にしたい
-
Excel VBAで、Averageの範囲を...
-
エクセルVBAでSUM関数の位置を...
-
SQL 文字列検索につきまして
-
同じテーブルをLEFT JOIN
-
Oracle SQL 結合の手法について
-
INNER JOINとwhere句
-
9iのSQL:1999構文を使用した外...
-
内部結合する時の結合条件と制...
-
2つのSQL(Access)の結果[時刻,...
おすすめ情報