mysql'de bir dizeyi tarihe dönüştürmek nasıl?


151

A stringolarak davranan bir sütunum var dateve onu bir date.

Mümkün mü?

Örnek veri formatım; month/day/year->12/31/2011

Yanıtlar:


262

MySQL'de söylendiği gibi, tarih alanı olarak tarih metnine sahip bir dize sütunu kullanarak şunları yapabilirsiniz:

SELECT  STR_TO_DATE(yourdatefield, '%m/%d/%Y')
FROM    yourtable

Bu tarih dizelerini WHEREyan tümcelerde de işleyebilirsiniz . Örneğin

SELECT whatever
  FROM yourtable
 WHERE STR_TO_DATE(yourdatefield, '%m/%d/%Y') > CURDATE() - INTERVAL 7 DAY

Her türlü tarih / saat düzenini bu şekilde yönetebilirsiniz. İkinci parametresine ne koyabileceğinizi görmek içinDATE_FORMAT() lütfen işlevin biçim belirleyicilerine bakın STR_TO_DATE().


6
Bence GÜN yerine ARALIK 7 GÜN olmalı
Feras Odeh

1
"Gg-aaa-yyyy" biçiminde bir karakter sütunum var. "Gg-aa-yyyy" biçiminde nasıl sorgu yaparım?
MAX

51
STR_TO_DATE('12/31/2011', '%m/%d/%Y')

Tarih nedir GG / AA / YYYY formatında 31/11/1015 gibi saklanır?
Vipul Hadiya

2
@VipulHadiya, tarih biçimi dizesini beğenecek şekilde değiştirin, %d/%m/%Ybu nedenle STR_TO_DATE('31/11/1015', '%d/%m/%Y')çıktının veri türü YYYY-MM-DDbiçiminde olacağını unutmayın DATE.
Will B.

1
StackOverflow'da yalnızca kod yanıtları düşük değerlidir. Lütfen bu doğru yanıtı geliştirin.
mickmackusa


11

İşte başka iki örnek.

Gün, ay ve yılın çıktısını almak için şunları kullanabilirsiniz:

select STR_TO_DATE('14/02/2015', '%d/%m/%Y');

Hangi üretir:

2015-02-14

Ayrıca zamanın çıktısını almak için şunları kullanabilirsiniz:

select STR_TO_DATE('14/02/2017 23:38:12', '%d/%m/%Y %T');

Hangi üretir:

2017-02-14 23:38:12


0

Aşağıda, STR_TO_DATE()işlevin söz dizimi gösterilmektedir :

STR_TO_DATE(str,fmt);

STR_TO_DATE()Dönüştürür fmt biçim dizesi dayalı bir tarih değeri haline str dize. STR_TO_DATE()İşlevi döndürebilir TARİH , SAAT veya DATETIME giriş ve biçim dizeleri dayalı değer. Girdi dizesi geçersizse, STR_TO_DATE()işlev NULL döndürür.

Aşağıdaki ifade bir dizeyi DATE değerine dönüştürür .

SELECT STR_TO_DATE('21,5,2013','%d,%m,%Y');

görüntü açıklamasını buraya girin

Biçim dizesi göre % d,% m,% Y , STR_TO_DATE()fonksiyon tarar '21, 5,2013' giriş dizesi.

  • İlk olarak, girdi dizesinde ayın bir günü (01… 31) olan% d biçim belirleyicisi için bir eşleşme bulmaya çalışır. 21 sayısı% d tanımlayıcısıyla eşleştiği için işlev, gün değeri olarak 21 alır.
  • İkinci olarak, biçim dizesindeki virgül (,) değişmez karakteri girdi dizesindeki virgülle eşleştiği için işlev, bir ay (01… 12) olan ikinci biçim belirleyicisi% m'yi kontrol etmeye devam eder ve sayının 5,% m biçim belirleyicisiyle eşleşir. 5 sayısını ay değeri olarak alır.
  • Üçüncüsü, ikinci virgülle (,) STR_TO_DATE() eşleştikten sonra, işlev dört basamaklı yıl olan% Y üçüncü biçim belirleyicisi için bir eşleşme bulmaya devam eder, örneğin 2012, 2013, vb. Ve yıl değeri olarak 2013 sayısını alır. .

STR_TO_DATE()İşlevi biçim dizesi dayalı giriş dizesi ayrıştırır girdi dizesinin sonunda fazladan karakter yok sayar. Aşağıdaki örneğe bakın:

SELECT STR_TO_DATE('21,5,2013 extra characters','%d,%m,%Y');

görüntü açıklamasını buraya girin

Daha Fazla Ayrıntı: Referans

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.