2010-06-30 45 views
1

使用MySQL & SQL服务器如何获得一个总天数

ID sDate 

001 03/06/2010 
002 07/08/2010 
.... 
.... 

SDATE数据类型为varchar 格式mm/dd/yyyy的

我想借此日期计数装置有多少天仍然是在那里,它应该比较系统日期...

如何将我的varchar转换为datetime数据类型,然后如何将mysdate与系统进行比较以获取总计天数

sDate - SystemDate = Totalday 

ExpectedOutput

ID sDate Totaldays 

001 03/07/2010 3 days 
002 07/07/2010 7 days 
..... 

如何使这个状态的查询。需要查询帮助。

+1

您可能需要考虑将您的数据类型更改为实际的日期类型。当使用任何内置的MySQL DATE函数时,每次都会进行类型转换,这可能会导致性能很差。 – 2010-06-30 03:58:40

+0

重新看起来与mysql无关的问题 – 2010-06-30 04:54:35

+0

我只需要mysql查询... – Gopal 2010-06-30 04:56:55

回答

7

您的问题声明的MySQL & SQL Server,以便在这里既:

SQL服务器datediff功能:

SELECT ID, DATEDIFF(DAY, GETDATE(), CONVERT(DATETIME, sDate)) FROM TABLE 

MySQL的datediff功能:

SELECT ID, DATEDIFF(CURDATE(), STR_TO_DATE(sDate, '%c/%d/%Y')) FROM TABLE 

它使用STR_TO_DATE功能转换将varchar设置为日期并假定日期字符串的格式为m格式onth /日/年。

+0

它是MySQL的查询? – 2010-06-30 04:43:42

+1

这是一个SQL服务器查询 – 2010-06-30 04:47:44

+0

当我在mysql中运行上述查询时,它显示错误为“您在sqlserver语法中有错误;检查与您的mysql服务器版本对应的手册, “ - Gopal 10分钟前 – Gopal 2010-06-30 04:55:32

0

戈帕尔,响应你的“如何为varchar转换为datetime在mysql中......”,这很容易:

ALTER TABLE sometable CHANGE sDate sDate datetime; 

和MySQL会很乐意尝试将值转换为您服务。但是,如果它无法正确解析原始日期字符串,则该记录的sDate将设置为NULL0000-00-00。您必须先按摩sDate字段,才能将其转换为日期字符串的更正常的MySQL格式,即YYYY-MM-DD。包含了暴力破解的黑客是:

UPDATE sometable SET sDate=CONCAT(
    SUBSTR(sDate, 6, 4), 
    '/', 
    SUBSTR(sDate, 3, 2), 
    '/', 
    SUBSTR(sDate, 0, 2) 
); 

当然,这是假设你的日期是在DD/MM/YYYY格式。如果他们是MM/DD/YYYY,那么交换中间和最后的SUBSTR调用。完成此更新后,即可使用ALTER TABLE更改字段类型。

当然,对于任何影响整个表格的事情,请确保先备份它。