こんにちは。
当方、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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) awkの文字列比較はPOSIXロケールまたはCロケールにおいてバイナリ値の比較に使えるか gawkな 1 2023/04/22 09:21
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
- Visual Basic(VBA) VBAで、特定の文字より後を削除して残った数値を文字列に変換と特定の文字より前も削除したい 3 2022/04/15 19:21
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- Excel(エクセル) エクセルで2つの表を比較して、文字列が同じだが、その行のある値が違うものを抽出したい 1 2022/10/06 21:48
- Excel(エクセル) Excelの関数についておしえてください。 3 2023/04/20 18:36
- Java Java 南京錠 2 2023/02/04 11:46
- その他(プログラミング・Web制作) プログラミング pythonの問題について 2 2022/04/19 00:41
- Excel(エクセル) エクセル 関数について質問です。 2 2022/10/03 11:14
- Visual Basic(VBA) 以下のVBAで該当文字列の前後に付与したい。 例 前に付与 abc ユーザーID 12345 後に付 3 2022/04/19 21:50
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBAで、Averageの範囲を...
-
Oracleでの文字列連結サイズの上限
-
Excelでセルの書式設定を使用し...
-
SQL>UPDATEと同時にその件数を...
-
GROUP BYを使ったSELECT文の総...
-
SQL文で右から1文字だけ削除す...
-
SELECTで1件のみ取得するには?
-
フォームの移動でのイベント
-
Accessで別テーブルの値をフォ...
-
sqlのwhereで指定した条件の前...
-
固定値を含む結合と複数テーブ...
-
エクセルなんですけど・・・・
-
【MYSQL】asでリネームしてwher...
-
エクセル関数 文字(ハイフン...
-
ADO VBA 実行時エラー3021
-
CREATE テーブルでの複数外部...
-
Access:抽出して、色をつけたい。
-
複数テーブル間の集計
-
Excelで、改行がある場合の条件...
-
select句副問い合わせ 値の個...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関係演算子が無効です。
-
SQL 外部結合についての質問
-
Excel VBAで、Averageの範囲を...
-
TO_CHAR関数における外部結合に...
-
同じテーブルをLEFT JOIN
-
自己相関サブクエリと自己結合...
-
LEFT JOINの条件式で=’’を使用...
-
Informixで文字列を数値型に
-
内部結合する時の結合条件と制...
-
T-SQL 動的に優先順ごとにデー...
-
Access 結合条件設定方法
-
エラー「無効な識別子です」
-
エクセルVBAでSUM関数の位置を...
-
WHERE句の書き方
-
Pro*CでVARCHAR2項目の検索
-
【修正希望】【マクロ】元デー...
-
Oracle SQL 結合の手法について
-
SQLで後方の文字列を置換する方法
-
エラー2「無効な識別子です」
-
パフォーマンスを考慮したSQL文...
おすすめ情報