Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
INSTR或CHARINDEX的平台无关SQL语句_Sql_Sql Server_Oracle_Standards_Platform Independent - Fatal编程技术网

INSTR或CHARINDEX的平台无关SQL语句

INSTR或CHARINDEX的平台无关SQL语句,sql,sql-server,oracle,standards,platform-independent,Sql,Sql Server,Oracle,Standards,Platform Independent,我在为Oracle和MS SQL server编写SQL语句时遇到问题。我想编写SQL,使其在两种情况下都能工作。我不想把设置数据库类型变量和切换弄得一团糟 我有一列课程名称,其值如下: 9RA923.2008W 1223.200710 P0033330.200901 我想选择“.”右边的所有内容 在oracle中,我使用的是: SELECT substr(bom_course_id, instr(bom_course_id, '.')+1) FROM ... 在MSSQL服务器中,我可以使用

我在为Oracle和MS SQL server编写SQL语句时遇到问题。我想编写SQL,使其在两种情况下都能工作。我不想把设置数据库类型变量和切换弄得一团糟

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

9RA923.2008W

1223.200710

P0033330.200901

我想选择“.”右边的所有内容

在oracle中,我使用的是:

SELECT substr(bom_course_id, instr(bom_course_id, '.')+1) FROM ...
在MSSQL服务器中,我可以使用:

SELECT SUBSTRING(bom_course_id, CHARINDEX('.', bom_course_id)+1 ) FROM ...
有没有人有一种聪明的方法,我可以在Oracle或MS SQL中使用相同的SQL语句来选择点后的最后一个字符

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


我真希望有一个SQL标准。

你能把它转换成数字,然后只取小数部分吗?

如果两个数据库上的区域设置相同,你可以使用

SELECT DISTINCT CAST(CAST(bom_course_id AS FLOAT) AS INTEGER)

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

这只是一个实现的示例


编辑:在阅读了你的评论之后,一个正确的功能在你的情况下并没有真正的帮助。然后您需要将相应的SQL Server功能映射到Oracle。

您是否考虑过将select隐藏在数据库视图中? 从应用程序的角度来看,它只是一个简单的、普通的选择,没有任何函数,所有特定于数据库的内容都保留在数据库中

可能不适合每个人,但这是一个想法。

看看,我看不到一个标准的方法来实现你想做的事情

ORACLE uses: INSTR
SQL SERVER uses: PATINDEX, CHARINDEX

ORACLE uses: SUBSTR
SQL SERVER uses: SUBSTRING
我想不出获得角色位置的常用方法


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

更清楚地说,我需要在“.”上拆分-我不知道点之前或之后有多少个字符。+1表示使用“平台无关”而不是“平台无关”。不抱歉,我刚刚检查,我不能指望字符串都是数字。不过这会奏效的。不,不幸的是,我不能指望自己都是数字。此外,我需要“.”右边的子字符串。这几乎可以工作:选择不同的bom\u course\u id-(CAST(CAST(bom\u course\u id为FLOAT)作为整数))函数“Position”就可以了。我决定选择bom\u course\u id并在代码中拆分字符串,而不是强制SQL来分隔字符串。