查询子串形成

时间:2010-07-10 19:38:29

标签: sql database string

我想使用SQL获取字符串01的{​​{1}}部分。对abcd_01之前的长度变化的问题应该是什么?也就是说,它可能是_abcde_01。基本上,我希望在ab_01之后完成。感谢。

4 个答案:

答案 0 :(得分:14)

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

SUBSTRING keyword, using PostgreSQL syntax (no mention of pattern matching) is ANSI-99。为什么这花了他们这么久,我不知道......

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

的Oracle


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一样,有三个选项 - SUBSTRSUBSTRINGRIGHT

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会更好,因此它可以向其他人明确说明发生了什么,并且应该更容易找到相同的功能。

答案 1 :(得分:4)

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

答案 2 :(得分:1)

从abcd_01获得01你应该这样写(假设列名是col1)

  

SELECT substring(col1,-2)FROM TABLE

这会给你最后两个字符。

答案 3 :(得分:0)

select substring(names,charindex('_',names)+1,len(names)-charindex('_',names)) from test