55

我想从表中选择一个字段并将其子串化。

例如:

VAN1031 --> 1031

我试过这个,但语法不正确:

SELECT SUBSTR(R.regnumber,3,3) from registration R

如何才能做到这一点?

4

6 回答 6

49

如果要选择特定索引右侧的所有字符,则不需要第三个参数(长度):

SELECT SUBSTR(R.regnumber, 4)
FROM registration AS R

我还将起始索引更改为 4,因为在 SQL 中,字符串是 1 索引而不是 0 索引,因为它们在许多流行的编程语言中都是如此。

于 2012-10-07T17:58:23.723 回答
33

您可以使用:

SUBSTR(string,position)
SUBSTR(string,position,length)
SUBSTRING_INDEX(string, delimiter, count)

例子:

command                                      prints
-------------------------------------------  -----------
select substr("abcd", 1, 1)                  #a
select substr("abcd", 1, 2)                  #ab
select substr("abcd", 2, 1)                  #b
select substr("abcd", 2, 2)                  #bc
select substr("abcd", -2, 1)                 #c
select substr("abcd", -2, 2)                 #cd

select substring_index('ababab', 'b', 1);    #a
select substring_index('ababab', 'b', 2);    #aba
select substring_index('ababab', 'b', 3);    #ababa
select substring_index('ababab', 'b', -1);   #
select substring_index('ababab', 'b', -2);   #ab
select substring_index('ababab', 'b', -3);   #abab

select substr("abcd", 2)                     #bcd
select substr("abcd", 3)                     #cd
select substr("abcd", 4)                     #d
select substr("abcd", -2)                    #cd
select substr("abcd", -3)                    #bcd
select substr("abcd", -4)                    #abcd

这个链接

于 2012-10-07T18:18:49.653 回答
7

您可以使用SUBSTRING()

select substring(col1, 4)
from table1

请参阅SQL Fiddle with Demo。所以你的查询是:

SELECT substring(R.regnumber,4) 
from registration R

如果要指定要返回的字符数:

select substring(col1, 4, 4)
from table1
于 2012-10-07T17:59:57.123 回答
4

我注意到 mysql 索引从 1 开始,而不是像许多编程语言那样从零开始。

SELECT SUBSTRING(R.regNumber,1,3) FROM registration AS R

返回 VAN 和

SELECT SUBSTRING(R.regNumber,4) FROM registration AS R

将字符串的剩余部分返回为 1031

于 2017-05-08T08:49:44.727 回答
2
SELECT substring(R.regnumber FROM 4) FROM registration AS R;

如果您想将该部分作为整数而不是字符串,您可以编写:

SELECT CAST(substring(R.regnumber FROM 4) AS UNSIGNED) FROM registration as R;
于 2016-05-03T20:19:25.907 回答
2

有时您需要在没有最后一个字符的情况下捕获列。例如,我有:

This is a string

假设由于某种原因我想要没有最后 6 个字符的列:

This is a 

我们可以这样做(使用@bluefeet 的答案和 LENGHT):

select substring(col1, 1,LENGTH(col1)-7)
from table1

这只是一个例子,但你明白了,我用来修复错误的数据库导入。

于 2017-12-22T13:14:41.743 回答