2012-10-07 32 views
31

Tablodan bir alan seçip alt dizgeyi seçmek istiyorum. ÖrneğinBir MySQL tablo sütunu ekleme

:

VAN1031 --> 1031 

Bunu denedim, ama yanlış sözdizimi:

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

Bu nasıl yapılabilir?

+2

Tabii ki! http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_substring - ps, 'SELECT SUBSTRING (' VAN1031 ', 4, 4) 'olur - 4. karakterden başlar – dash

+0

'dümesinden 4 karakter alır' 'penguenler'i seçin, substr (" penguenler ", 1, 3)' baskılar: 'penguenler kalemi' –

cevap

23

Belirli bir endeks sağındaki tüm karakterleri seçmek istiyorsanız Üçüncü argüman (uzunluk) gerekmez çünkü: SQL dizeleri

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

Ben de 4'e başlama indeksi değişti birçok popüler programlama dilinde oldukları için 1-indeksli ve 0-endeksli değildir.

+0

Neden bilmiyorum' substr (col, 4) ' benim için çalışmaz ve bunu şöyle kullanmalıyım: 'substr (col, 1, 4)'. niye ya? Sorunum MySQL sürümü ile ilgili mi? – Shafizadeh

22

kullanabilirsiniz:

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

Örnekler:

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 
İade etmek karakter sayısını belirtmek istiyorsanız Of

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

'dan.

+6

Örneklerinde 'ababab ',' ab 'metninin tekrarlanması nedeniyle çıktı kafa karıştırıcı olduğundan abcdef ile değiştirilmelidir. – machineaddict

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

ve bir tamsayı olarak yer almak istiyorsanız bir dize yazabilirsiniz:

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

Ben MySQL endeksi sıfır gibi birçok programlama dilleri yaptılar yerine 1'den başlar fark ettim.

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

VAN İade ve

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

0

Bazen bazı son karakterler olmadan sütunu yakalamak için gereken 1031 olarak dizesinin kalan kısmını döndürür. Örneğin, ben var: (@bluefeet cevabını ve BOYU kullanarak)

This is a 

Biz yapabiliriz:

This is a string 

en son 6 karakterler olmadan nedense sütun istediğinizi varsayalım

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

Sadece bir örnekti, ancak sizde yanlış bir veritabanı içe aktarma düzeltmesi için kullanıyorum.