
こんにちは。
当方、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を探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAでSUM関数の位置を...
-
内部結合する時の結合条件と制...
-
TO_CHAR関数における外部結合に...
-
OracleのSQL*PLUSで、デー...
-
GROUP BYを行った後に結合した...
-
Oracleでの文字列連結サイズの上限
-
SELECTで1件のみ取得するには?
-
Accessで別テーブルの値をフォ...
-
レコードが存在しなかった場合
-
ADO VBA 実行時エラー3021
-
select insertで複数テーブルか...
-
GROUP BYを使ったSELECT文の総...
-
ACCESSの集計クエリで3件ある...
-
SELECTの結果で同一行を複数回...
-
あるカラムのMAX値+1をINSERTし...
-
ACCESSで大量の更新を行うと「...
-
固有レコード識別子の選択とは
-
サブフォームに新規レコードを...
-
Excelで、改行がある場合の条件...
-
MS-ACCESS2000で数万件のデータ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQL 外部結合についての質問
-
関係演算子が無効です。
-
エラー2「無効な識別子です」
-
末尾に空白を含む項目の扱い
-
SQLで後方の文字列を置換する方法
-
エラー「無効な識別子です」
-
2つのSQL(Access)の結果[時刻,...
-
Informixで文字列を数値型に
-
自己相関サブクエリと自己結合...
-
VBAでIF文を作成したが、もう少...
-
同じテーブルをLEFT JOIN
-
【修正希望】【マクロ】元デー...
-
WHERE句の書き方
-
TO_CHAR関数における外部結合に...
-
こういう場合のSQLの書き方。
-
SQL 副問い合わせ使い方について
-
LEFT JOINの条件式で=’’を使用...
-
Excel VBAで、Averageの範囲を...
-
SQLの初級の練習問題
-
Access 結合条件設定方法
おすすめ情報