2012-10-07 24 views
31

我想从表中选择一个字段并对其进行子字符串。如何子字符串MySQL表列

例如:

VAN1031 --> 1031 

我想这一点,但不正确的语法:

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

如何才能做到这一点?

+2

当然! http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_substring - ps,它会是'SELECT SUBSTRING('VAN1031',4,4)' - 从第4个字符开始并从字符串中取4个字符;-) – dash

+0

'选择“企鹅”,substr(“企鹅”,1,3)'打印:'企鹅笔' –

回答

23

,如果你想选择的所有字符到一个特定的指数权不需要第三个参数(长):因为在SQL字符串

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

我也改变了开始索引4是1索引而不是0索引,因为它们在许多流行的编程语言中。

+0

我不知道为什么'substr(col,4)'做不适合我,我必须像这样使用它:'substr(col,1,4)'。为什么?我的问题与MySQL版本有关? – Shafizadeh

6

您可以使用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 
22

您可以使用:

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 

this link

+6

在你的例子中'ababab'应该替换为'abcdef',因为输出令人困惑,因为重复'ab'文本。 – machineaddict

1
SELECT substring(R.regnumber FROM 4) FROM registration AS R; 

,如果你想利用部分为整数的字符串,你可以这样写:

SELECT CAST(substring(R.regnumber FROM 4) AS UNSIGNED) FROM registration as R; 
0

我注意到,MySQL的指数从1而不是零种尽可能多的编程语言没有开始。

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

返回VAN和

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

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

0

有时你需要赶上列没有一些最后一个字符。例如,我有:

This is a string 

比方说,由于某种原因,我想列没有最后6个字符:

This is a 

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

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

这只是一个例子,但你有这个想法,我正在使用它来修复错误的数据库导入。

相关问题