查询子串形成

abh*_*ngh 9 sql database string

我想使用SQL 来获取01字符串的一部分abcd_01.应该对此进行什么查询,其中长度在_变化之前?也就是说,它可能是abcde_01ab_01.基本上,我想要的一部分_.谢谢.

OMG*_*ies 16

这是SQL和各种扩展之间的类似功能的例子之一,但只是不同,你不能保证所有数据库之间的可移植性.

使用PostgreSQL语法(没有提到模式匹配)SUBSTRING关键字是ANSI-99.为什么这花了他们这么久,我不知道......

您需要的关键是获取现有列值的子字符串,因此您需要知道调用数据库子字符串函数的内容.

神谕


SELECT SUBSTR('abcd_01', -2) FROM DUAL
Run Code Online (Sandbox Code Playgroud)

Oracle没有RIGHT函数,实际上它只是substring函数的包装器.但Oracle的SUBSTR确实允许您指定一个负数,以便反向处理字符串(从头开始).

SQL Server


两个选项 - SUBSTRINGRIGHT:

SELECT SUBSTRING('abcd_01', LEN('abcd_01') - 1, 2)
SELECT RIGHT('abcd_01', 2)
Run Code Online (Sandbox Code Playgroud)

为简洁起见,RIGHT是理想的.但是为了便携性,SUBSTRING是更好的选择......

MySQL的


与SQL Server一样,有三个选项 - SUBSTR,SUBSTRINGRIGHT:

SELECT SUBSTR('abcd_01', LENGTH('abcd_01') - 1, 2)
SELECT SUBSTRING('abcd_01', LENGTH('abcd_01') - 1, 2)
SELECT RIGHT('abcd_01', 2)
Run Code Online (Sandbox Code Playgroud)

PostgreSQL的


PostgreSQL只有SUBSTRING:

 SELECT SUBSTRING('abcd_01' FROM LENGTH('abcd_01')-1 for 2)
Run Code Online (Sandbox Code Playgroud)

...但它支持有限的模式匹配,您可以看到其他地方不支持.

SQLite的


SQLite仅支持SUBSTR:

SELECT SUBSTR('abcd_01', LENGTH('abcd_01') - 1, 2)
Run Code Online (Sandbox Code Playgroud)

结论


如果可用则使用RIGHT,而如果需要将查询移植到其他数据库,则SUBSTR/SUBSTRING会更好,因此它可以向其他人明确说明发生了什么,并且应该更容易找到相同的功能.


gbn*_*gbn 5

如果始终是最后两个字符,则可RIGHT(MyString, 2)在大多数SQL方言中使用