2013-03-18 84 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