Ben bir CSV dosyasını tarihlerle birlikte mysql içine aldım dd/aa/yyyy Şimdi metinden metne dönüştürmek için bir sorguya ihtiyacım var yyy-aa-ggsorgu sql metin alanı dönüştürmek dd/aa/yyyy tarih alanına yyyy-aa-gg
Alkış
S.
Ben bir CSV dosyasını tarihlerle birlikte mysql içine aldım dd/aa/yyyy Şimdi metinden metne dönüştürmek için bir sorguya ihtiyacım var yyy-aa-ggsorgu sql metin alanı dönüştürmek dd/aa/yyyy tarih alanına yyyy-aa-gg
Alkış
S.
Sen STR_TO_DATE(str, format) MySQL fonksiyonunu kullanabilirsiniz. Bir dönüştürülmüş biri için my_date_col
dışarı anahtarlama
Örnek:
BEGIN;
ALTER TABLE `date_test`
ADD COLUMN `my_date_col_converted` DATE;
UPDATE `date_test`
SET `my_date_col_converted` = STR_TO_DATE(`my_date_col`, '%d/%c/%Y');
ALTER TABLE `date_test`
DROP COLUMN `my_date_col`;
ALTER TABLE `date_test`
CHANGE COLUMN `my_date_col_converted` `my_date_col` DATE;
COMMIT;
Sen için metninizi dönüştürmek için aşağıdaki şekilde STR_TO_DATE()
kullanabileceğiniz bir DATE
:
STR_TO_DATE(datefield , "%d/%m/%Y")
Eğer bu DATE
gerekiyorsa belirli bir formatta, DATE_FORMAT()
'u kullanabilirsiniz.
muhtemelen Bu durumda gerekli değildir, ama burada şeyiyle bir örnek: Yani
DATE_FORMAT(STR_TO_DATE(datefield , "%d/%m/%Y") , "%Y/%m/%d")
, siz (yeniden biçimlendirilmiş verilerle güncel verileri değiştirmek için tek UPDATE
ile tüm masanın üzerinden bu yapabileceğini) aynı veri türü tutarken:
UPDATE tableName
SET originalDate = DATE_FORMAT(STR_TO_DATE(originalDate,"%d/%m/%Y"),"%Y/%m/%d");
Yoksa sütuna DATE
veri türünü dönüştürmek istiyorsanız, masa, yeni DATE
biçimlendirilmiş sütun oluşturun bu sütunu doldurmak için yukarıdaki güncelleştirme kullanmak değiştirebilir orijinal sütunu ve en (isteğe bağlı olarak) yeni sütunu eski ada göre yeniden adlandır.
ALTER tableName
ADD modifiedDate DATE;
UPDATE tableName
SET modifiedDate = DATE_FORMAT(STR_TO_DATE(originalDate ,"%d/%m/%Y") ,"%Y/%m/%d");
ALTER tableName
DROP COLUMN originalDate;
ALTER tableName
CHANGE COLUMN modifiedDate originalDate;
Çalışmıyorsa, bir gösteri demo gösterebilirsiniz. – user1896796
Bu çalışması gerekir ama öyle değil:
BEGIN;
ALTER TABLE `date_test`
ADD COLUMN `my_date_col_converted` DATE;
UPDATE `date_test`
SET `my_date_col_converted` = STR_TO_DATE(`my_date_col`, '%d/%c/%Y');
ALTER TABLE `date_test`
DROP COLUMN `my_date_col`;
ALTER TABLE `date_test`
CHANGE COLUMN `my_date_col_converted` `my_date_col` DATE;
COMMIT;
Ayrıca, bu çalışması gerekir: MySQL 5.0.95-toplum-log:
UPDATE db_test SET anticipated_court_date = DATE_FORMAT(STR_TO_DATE(anticipated_court_date,"%d/%m/%Y"),"%Y-%m-%d");
Sunucu sürümü Çalışmıyor Topluluk Sürümü (GPL)
Ancak bu şu şekilde çalışır:
SELECT STR_TO_DATE('8/31/12', '%m/%d/%Y'); // WORKS
MySQL'i Kullanma - Güvenilir şekilde çalıştı herhangi bir çözüm bulamadık. Aynı kesin tarih bile başarıyla dönüştürülmedi.
The solution I've found is this: PHP
$user_date = "8/31/12"; // WORKS
$mysql_date = date('Y-m-d H:i:s', strtotime($user_date));
Yukarıdakiler yardımcı oldu, ancak aşağıdaki Mysql'de benim için çalıştı. (Isterseniz)
ALTER TABLE `tablename` ADD `newcolumn` DATE NOT NULL ;
UPDATE `tablename` SET `newcolumn`=STR_TO_DATE(`oldcolumn`, '%d/%c/%Y')
Şimdi oldcolumn silin.
Teşekkürler, bunu deneyeceğim! – stefano
Lütfen cevaplardan birini işaretlemeyi düşünün, böylece sorunun kapalı olduğunu biliyoruz;) – conny