sql – 查询子串形成

我想使用sql获取字符串abcd_01的01部分.什么应该是这个查询,_之前的长度变化?也就是说,它可能是abcde_01或ab_01.基本上,我想要_之后的部分.谢谢.

解决方法

这是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

两个选项 – SUBSTRINGRIGHT

SELECT SUBSTRING('abcd_01',LEN('abcd_01') - 1,2)
SELECT RIGHT('abcd_01',2)

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

MysqL

sql Server一样,有三个选项 – SUBSTR,SUBSTRINGRIGHT

SELECT SUBSTR('abcd_01',LENGTH('abcd_01') - 1,2)
SELECT SUBSTRING('abcd_01',2)

Postgresql

Postgresql只有SUBSTRING

SELECT SUBSTRING('abcd_01' FROM LENGTH('abcd_01')-1 for 2)

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

sqlite的

sqlite仅支持SUBSTR

SELECT SUBSTR('abcd_01',2)

结论

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

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...