解决方法
这是sql和各种扩展之间具有类似功能的示例之一,但只是不同,您无法保证所有数据库之间的可移植性.
SUBSTRING keyword,using PostgreSQL syntax (no mention of pattern matching) is ANSI-99.为什么这花了他们这么久,我不知道……
您需要的关键是获取现有列值的子字符串,因此您需要知道调用数据库子字符串函数的内容.
神谕
SELECT SUBSTR('abcd_01',-2) FROM DUAL
Oracle没有RIGHT函数,实际上它只是substring函数的包装器.但是Oracle’s SUBSTR确实允许你指定一个负数,以便反向处理字符串(结束于开始).
sql Server
SELECT SUBSTRING('abcd_01',LEN('abcd_01') - 1,2) SELECT RIGHT('abcd_01',2)
为简洁起见,RIGHT是理想的.但是为了便携性,SUBSTRING是更好的选择……
与sql Server一样,有三个选项 – SUBSTR,SUBSTRING和RIGHT:
SELECT SUBSTR('abcd_01',LENGTH('abcd_01') - 1,2) SELECT SUBSTRING('abcd_01',2)
Postgresql的
SELECT SUBSTRING('abcd_01' FROM LENGTH('abcd_01')-1 for 2)
sqlite的
SELECT SUBSTR('abcd_01',2)
结论
如果可用则使用RIGHT,而如果需要将查询移植到其他数据库,则SUBSTR / SUBSTRING会更好,因此它可以向其他人显示正在发生的事情,并且应该更容易找到相同的功能.