2

我在为 Oracle 和 MS SQL 服务器编写 SQL 语句时遇到问题。我想编写 SQL 以便它在两者中都有效。我不想搞乱设置数据库类型变量和切换

我有一列课程名称,其值如下:

9RA923.2008W

1223.200710

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 或 MS SQL 中使用相同的 SQL 语句。

不幸的是,我不知道“。”之前或之后会有多少个字符。它也不完全是数字,我不能只指望数字。

我真的希望有一个 SQL 标准。

4

5 回答 5

1

您是否考虑过将选择隐藏在数据库视图中?从应用程序的角度来看,它只是一个没有函数的普通 SELECT,所有特定于数据库的东西都保留在数据库中。

可能不适合所有人,但它是一个想法。

于 2009-02-12T21:44:35.287 回答
1

查看此链接,我没有看到实现您想要做的事情的标准方法。

ORACLE uses: INSTR
SQL SERVER uses: PATINDEX, CHARINDEX

ORACLE uses: SUBSTR
SQL SERVER uses: SUBSTRING

我想不出获得字符位置的通用方法。

VIEW可能是最简单的方法,或者在客户端应用程序本身中进行。

于 2009-02-13T00:38:45.523 回答
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

您可以编写一个名为 RIGHT 的 Oracle 函数,它的作用与 SQL Server 相同,然后在您的 SQL 中使用它。

这里只是一个实现的例子。

编辑:阅读您的评论后,RIGHT 功能对您的情况并没有真正的帮助。然后您需要将相应的 SQL Server 函数映射到 Oracle。

于 2009-02-12T19:58:26.600 回答