2013-03-18 127 views
1

我正在做點事情:MySQL將datetime從datetime中移除,轉換爲varchar。 SUBSTR()?

所以我已經從datetime轉換成varchar列(有正當理由)。我的問題是從時間的所有0的也有各種各樣的。嘗試使用concat()去除字符串。

例如:2013年12月12日00:00:00

輸出:2013年12月12日

的問題是,不是所有的VARCHAR處理有「00:00: 00「結束。他們中的一些被放在AFTER系統轉到varchar而不是datetime因此,我可以從字符串中去除-X,而不先檢查它是否大於12個字符。

我想這樣

UPDATE logic_intern_report_link SET comp_date=SUBSTR(comp_date,0,10) 

然而,這結束了該列刪除所有值。

+0

只是好奇。這些原因是什麼?也許我們有另一個解決方案,而不是轉換爲varchar。 – fancyPants 2013-03-18 15:29:01

+1

...等等,你是_storing_他們作爲varchar?有**沒有理由將日期值存儲爲字符值 - 您只是要求在該列中獲取無效數據,並且您將不得不將其轉換爲日期以進行某些類型的比較(儘管至少你有一個SARGable格式)。 – 2013-03-18 15:31:04

+0

該字段用於比較的時間較長,客戶希望將它放在「下個星期二」中。它不再是一個真正的日期字段......更多的是「評論」字段。 – 2013-03-18 15:32:04

回答

4
UPDATE logic_intern_report_link 
SET  comp_date = DATE_FORMAT(DATE(comp_date), '%Y-%m-%d') 
+0

我的英雄,它不會讓我接受另一個10分鐘的答案,但那完全符合我所尋找的! – 2013-03-18 15:29:03

+0

嘿嘿,很高興聽到! ':D' – 2013-03-18 15:30:04

0
update logic_intern_report_link 
set comp_date = REPLACE(comp_date, ' 00:00:00', '') 
4

我同意JW的解決方案,而只是回答你的問題: 的原因你得到空值與原始查詢是,SUBSTR()函數需要一個1而不是您提供的作爲第二個參數的零。 試試這個

SELECT SUBSTR(comp_date,1,10) FROM logic_intern_report_link 

看到區別。 (完整披露:SUBSTR()函數也會接受負開始索引)

+0

謝謝,第一個人回答爲什麼我的原始代碼段不起作用。 +1 – 2013-03-18 15:35:29