2

OracleとMSSQLServerの両方のSQLステートメントの記述に問題があります。両方で機能するようにSQLを記述したいと思います。データベース型変数の設定と切り替えをいじる必要はありません

次のような値を持つコース名の列があります。

9RA923.2008W

2007年12月23日10

P0033330.200901

「。」の右側をすべて選択したい。

オラクルではこれを使用しています:

SELECT substr(bom_course_id, instr(bom_course_id, '.')+1) FROM ...

MSSQL Serverでは、これを使用できます。

SELECT SUBSTRING(bom_course_id, CHARINDEX('.', bom_course_id)+1 ) FROM ...

OracleまたはMSSQLのいずれかで同じSQLステートメントを使用して、ドットの後の最後の文字を選択できる賢い方法はありますか。

残念ながら、「。」の前後に何文字あるかわかりません。完全に数字でもないので、数字だけでは数えられません。

SQL標準があったらいいのにと思います。

4

5 に答える 5

1

このリンクを見ると、やりたいことを達成するための標準的な方法がわかりません。

ORACLE uses: INSTR
SQL SERVER uses: PATINDEX, CHARINDEX

ORACLE uses: SUBSTR
SQL SERVER uses: SUBSTRING

キャラクターの位置を取得するための一般的な方法が思いつきませんでした。

VIEWはおそらく最も簡単な方法であり、クライアント アプリケーション自体で実行することもできます

于 2009-02-13T00:38:45.523 に答える
1

データベースビューで選択を非表示にすることを検討しましたか? アプリケーションの観点からは、関数のない単純な単純な SELECT であり、データベース固有のものはすべてデータベースに残ります。

すべての人に合うとは限りませんが、アイデアです。

于 2009-02-12T21:44:35.287 に答える
0

それを数値にキャストして、小数部分だけを取ることはできますか?

于 2009-02-12T19:45:28.537 に答える
0

地域設定が両方のデータベースで同じ場合は、次を使用できます

SELECT DISTINCT CAST(CAST(bom_course_id AS FLOAT) AS INTEGER)
于 2009-02-12T19:55:00.900 に答える
0

SQL Server と同じように機能する RIGHT という名前の Oracle 関数を作成し、それを SQL で使用できます。

これは実装のほんの一例です

EDIT:あなたのコメントを読んだ後、あなたの状況ではRIGHT関数はあまり役に立ちません。次に、対応する SQL Server 関数を Oracle にマップする必要があります。

于 2009-02-12T19:58:26.600 に答える