2012-10-07 17 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

'select" penguins "、substr(" penguins "、1,3)' prints: 'ペンギンズペン' –

答えて

23

あなたが特定のインデックスの右側にあるすべての文字を選択したい場合は、第三引数(長さ)を必要としない:

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

私もためにSQL文字列に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(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 
をあなたが返すように文字の数を指定する場合の

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

投稿者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 

戻り時にはあなたには、いくつかの最後の文字なしの列をキャッチする必要が1031

0

などの文字列の残りの部分を返します

VANと

SELECT SUBSTRING(R.regNumber,4) FROM registration AS R 
。例えば、私が持っている:私たちは(@bluefeetの答えとな長さを使用して)行うことができます

This is a 

This is a string 

はのは、最後の6つの文字なしで、何らかの理由で、私は列をしたいとしましょう

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

これは一例に過ぎませんが、間違ったデータベースのインポートを修正するために使用しています。

関連する問題