这是有关SQL与各种扩展之间如何具有相似功能的示例之一,但是它们之间的差异足以使您无法保证所有数据库之间的可移植性。
使用PostgreSQL语法(未提及模式匹配)的SUBSTRING关键字是ANSI-99。为什么这花了他们这么长时间,我不知道…
您需要解决的问题是获取现有列值的子字符串,因此您需要知道数据库子字符串函数被调用了什么。
甲骨文
SELECt SUBSTr('abcd_01', -2) FROM DUALOracle没有RIGHT函数,实际上它只是子字符串函数的包装器。但是Oracle的SUBSTR确实允许您指定一个负数,以便以相反的方式处理字符串(以开头结尾)。
SQL服务器
两个选项-SUBSTRING和RIGHT:
SELECt SUBSTRINg('abcd_01', LEN('abcd_01') - 1, 2)SELECT RIGHt('abcd_01', 2)为了简洁起见,RIGHT是理想的选择。但是对于可移植性而言,SUBSTRING是更好的选择…
的MySQL
与SQL Server一样,三个选项-SUBSTR,SUBSTRING和RIGHT:
SELECT SUBSTr('abcd_01', LENGTH('abcd_01') - 1, 2)SELECT SUBSTRINg('abcd_01', LENGTH('abcd_01') - 1, 2)SELECT RIGHt('abcd_01', 2)PostgreSQL的
PostgreSQL只有SUBSTRING:
SELECT SUBSTRINg('abcd_01' FROM LENGTH('abcd_01')-1 for 2)…但是它确实支持有限的模式匹配,您可以看到其他地方不支持这种模式。
SQLite的
SQLite仅支持SUBSTR:
SELECT SUBSTr('abcd_01', LENGTH('abcd_01') - 1, 2)结论
如果可用,请使用RIGHT,而如果需要将查询移植到其他数据库,则SUBSTR /
SUBSTRING会更好,因此其他人可以清楚知道正在发生的事情,并且应该更容易找到等效的功能。



