2016-03-24 14 views
1

Her şeyden önce, başka bir programlama dilinin kullanımına izin verilmez.mdY biçiminde tarih ekleme, salt MYSQL

mdY dize biçiminde gelen bir tarihi düşünün örn. 1252016 (lider ay 1 karakter uzunluğu ya da 2 olabilir hariç) 10252016 Her iki durumda da, Ekim 25 2016.

için olduğu gibi, 25 Ocak 2016, biz ya olarak ayın sonuna kadar olan alt istediğiniz: SUBSTRING("1252016" , 1, 1); => 1 veya SUBSTRING("10252016" , 1, 2); => 10. Örneğin

:

CONCAT_WS("-", 
    SUBSTRING("1252016" , -4, 4) , 
    SUBSTRING("1252016" , 1, 1) , 
    SUBSTRING("1252016" , -6, 2) 
); => "2016-1-25" 

şartlı dize başlangıcına 7 pozisyondan olumsuz okumak için dize veya başka bir şekilde başından itibaren 1 veya 2 karakterleri almak için herhangi bir yolu var mı, ve REVERSE?

Başka bir programlama dili kullanmamanın nedeni, LOAD DATA LOCAL INFILE aracılığıyla içe aktarılan tarihleme miktarından kaynaklanmaktadır. Ve anladığım kadarıyla, sadece sorgu yapısını kontrol edebilirim.

+2

Ne '1112016' için doğru sonuç olurdu? 11/1/2016 veya 1/11/2016 –

+0

@JoachimIsaksson sadece veritabanına doğru bir 'DATE' eklemek zorunda. Biçimin "mdY" veya "dmY" olarak başlayıp başlamaması, birinin d/m'nin karakter uzunluğunda 1 veya 2 olmasını sağlama potansiyeli vardır. – Jonathan

+0

@JoachimIsaksson doğrudur. Yedi haneli bir numaraya sahip olduğunuzda, tarih biçiminiz doğal olarak belirsizdir. Şu anda belirtildiği gibi veri içe aktarma çabanız başarılı olmaz. Veri kaynağınızı 25-Ocak-2016 için 5-Aralık 2016 ve 01252016 için “12052016” yazmak için alabilirseniz, bu işi yapma şansınız olacaktır. Ama eğer 1252016'yı alırsanız, ikisinin arasındaki farkı ayırt edemezsiniz. –

cevap

3

ped başında sıfır bulunan dize ve sonra STR_TO_DATE işlevini kullanın:

SELECT STR_TO_DATE(LPAD('1252016', 8, '0'), '%m%d%Y'); 
+0

Güzel, teşekkürler! – Jonathan