Mysql 如何比较数据库中存储为字符串(varchar)的日期?

Mysql 如何比较数据库中存储为字符串(varchar)的日期?,mysql,sql,sql-server,oracle,Mysql,Sql,Sql Server,Oracle,我有一个数据库(表),其中有两个字段: fromdate varchar(20) todate varchar(20) 日期以这种方式存储: YYYY-MM-DD HH:mm:ss 例如:数据库中的“2014-10-30 10:10:10” 现在我想比较两个日期,并使用查询从数据库中获取记录,从2014-09-10 10:10:10(fromdate)到2014-10-10 10:10:10(todate) 如何获取所有准确的记录。。有什么解决办法吗 谢谢。使用 从您的_表中选择* 其中s

我有一个数据库(表),其中有两个字段:

fromdate varchar(20)
todate  varchar(20)
日期以这种方式存储:

YYYY-MM-DD HH:mm:ss
例如:数据库中的“2014-10-30 10:10:10”

现在我想比较两个日期,并使用查询从数据库中获取记录,从2014-09-10 10:10:10(
fromdate
)到2014-10-10 10:10:10(
todate

如何获取所有准确的记录。。有什么解决办法吗

谢谢。

使用

从您的_表中选择*
其中str_to_date(fromdate,%Y-%m-%d%H:%i:%s')>='2014-09-10 10:10:10'
和截止日期(截止日期,%Y-%m-%d%H:%i:%s)
我有一个数据库(表),其中有两个字段:fromdate varchar(20)
todate varchar(20)

这是一个设计缺陷。日期应始终是
Date
数据类型,而不能是字符串

日期以这种方式存储YYYY-MM-DD HH:MM:ss


日期
从未以任何格式存储。这是我们人类应该理解的

Oracle存储的
日期
总共为
7个字节
。其中的每个字节存储日期元素的值,如下所示:

Byte    Description
----    -------------------------------------------------
1       Century value but before storing it add 100 to it
2       Year and 100 is added to it before storing
3       Month
4       Day of the month
5       Hours but add 1 before storing it
6       Minutes but add 1 before storing it
7       Seconds but add 1 before storing it
例如:数据库中的“2014-10-30 10:10:10”

现在我想比较两个日期,并通过 使用查询,2014-09-10 10:10:10(从日期)到2014-10-10 10:10:10(今天)

只需使用
to_date('2014-10-30 10:10:10','YYYY-MM-DD HH24:MI:SS')


注意这是针对Oracle数据库的。我看到您也标记了SQL Server。我不明白你为什么这样做。

只需比较字符串,而不需要额外的开销

此格式“YYYY-MM-DD HH:MM:ss”按时间顺序和文字字母顺序排列

SELECT * FROM someTable
WHERE fromdate >= '2014-09-10 10:10:10' AND todate <= '2014-10-10 10:10:10'
SELECT*fromsometable

其中fromdate>='2014-09-10 10:10:10'和todate首先,您可以使用
转换
功能:

SELECT CONVERT(Datetime, '2014-10-30 18:00:00', 120) 

Second,如果您无法更改现有列及其类型,并不意味着您无法添加具有正确日期类型的附加列,以复制“错误”列的含义。这既可以保存您的旧代码,又可以帮助您进行新的开发,因为查询中的所有转换操作在性能上都非常昂贵。

为什么
datetime
s存储为
varchar
?它的旧数据库!所有日期都存储在varchar中。我们必须在不更改数据库结构的情况下迁移应用程序。您必须首先确定您的数据库是MySql、SqlServer还是Oracle。为什么它们都在标记中?OTOH,它们存储方式的优点(yyyy向下到ss)是这些时间戳的字母顺序===时间顺序,因此您应该能够测试字符串并获得与日期相同的结果。
DATE
从未以任何格式存储。这是我们人类应该理解的。Oracle存储的
日期
总共为
7个字节
。其中的每个字节存储日期元素的值。阅读我的答案。str_to_date是数据库供应商特有的吗?它实际上是如何区分存储在varchar中的两个日期的?我们几乎拥有所有数据库,我需要一个通用查询..这样它就可以在任何数据库上工作..@vineeth.soman:那么你需要为每个数据库引擎提供不同的解决方案。或者你真正应该做的事情-将数据类型更改为datetime,一切都会好起来-你不需要函数调用,而且这比我们想的要快得多..但是数据库包含实时数据..我们还必须合并旧数据..我们的badAs我说,使用
记录日期
,但您认为数据库中存储日期的方式是错误的。希望您现在理解我解释的7字节信息。@fvu+1,您说得比我好。我应该说字母顺序而不是文字
SELECT CONVERT(Datetime, '2014-10-30 18:00:00', 120)