我在为Oracle和MS SQL服务器编写SQL语句时遇到问题。我想编写SQL以便它可以在两者中工作。我不想乱用设置数据库类型变量和切换
我有一列课程名称,其值如下:
9RA923.2008W
1223.200710
P0033330.200901
我想选择“。”的所有内容。
在oracle中我正在使用它:
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标准。
答案 0 :(得分:1)
您是否考虑过将数据库隐藏在数据库视图中? 从应用程序的角度来看,它只是一个普通的,没有函数的vanilla,并且所有特定于数据库的东西都保留在数据库中。
可能不适合所有人,但这是一个想法。
答案 1 :(得分:1)
看this link,我看不到达到你想做的标准方法。
ORACLE uses: INSTR
SQL SERVER uses: PATINDEX, CHARINDEX
ORACLE uses: SUBSTR
SQL SERVER uses: SUBSTRING
我想不出一个获得角色位置的常用方法。
VIEW 可能是在客户端应用程序中继续或的最简单方法。
答案 2 :(得分:0)
你可以将它转换为数字,然后只取小数部分吗?
答案 3 :(得分:0)
如果两个数据库的区域设置相同,则可以使用
SELECT DISTINCT CAST(CAST(bom_course_id AS FLOAT) AS INTEGER)
答案 4 :(得分:0)
您可以编写一个名为RIGHT的Oracle函数,它与SQL Server一样,然后在SQL中使用它。
Here只是一个实现的例子。
编辑:阅读完评论后,正确的功能对您的情况不会有帮助。然后,您需要将相应的SQL Server函数映射到Oracle。