数据以字符串形式存储时,有关日期和时间的SQL语句

数据以字符串形式存储时,有关日期和时间的SQL语句,sql,Sql,嗨, 我将数据和时间存储为varchar类型,数据如下所示“9/16/2010 2:59:10 PM”。 现在,当我运行以下SQL语句时,我想从两个日期之间检索数据,例如从2010年1月1日到2010年10月31日: SELECT username, timein, timeout FROM user_log WHERE (timein BETWEEN '01/01/2010' AND '30/11/2010') 它什么也没给我。那么我应该如何解决这个问题呢。

嗨, 我将数据和时间存储为varchar类型,数据如下所示“9/16/2010 2:59:10 PM”。 现在,当我运行以下SQL语句时,我想从两个日期之间检索数据,例如从2010年1月1日到2010年10月31日:

SELECT     username, timein, timeout
FROM         user_log
WHERE     (timein BETWEEN '01/01/2010' AND '30/11/2010')
它什么也没给我。那么我应该如何解决这个问题呢。
谢谢。

您必须将字符串转换为日期日期时间

SELECT     username, timein, timeout
FROM         user_log
WHERE     (CAST(timein AS DATE) BETWEEN CAST('01/01/2010' AS DATE) AND CAST('30/11/2010' AS DATE))

编辑-在
timein
字段中添加了一个强制转换,您必须
cast
将字符串强制转换为
DATE
DATETIME

SELECT     username, timein, timeout
FROM         user_log
WHERE     (CAST(timein AS DATE) BETWEEN CAST('01/01/2010' AS DATE) AND CAST('30/11/2010' AS DATE))

编辑-在
字段

中添加了一个转换,如果数据不是真实日期,就数据库数据类型而言,基于日期的比较不应该起作用。你的选择是:

1) 将列升级为基于日期/时间的数据类型


2) 正如另一个用户所写,将每个字符串转换为日期。与第一个选项不同,此选项的性能很差。

如果数据不是真实日期,就数据库数据类型而言,您不应该期望基于日期的比较起作用。你的选择是:

1) 将列升级为基于日期/时间的数据类型


2) 正如另一个用户所写,将每个字符串转换为日期。与第一个选项不同,此选项的性能较差。

如果它存储为字符串,则将其视为字符串。您不能比较这两个字符串
9/16/2010
30/11/2010
,而期望任何有用的东西(即第一位数字3在9之前)。第一个选择是介于“2010年1月1日”和“2010年11月30日”之间的
。如果你所有的数据都来自一年,它可能会工作,尽管我不确定不同数字(不是0填充)是否会工作。超过一年,2010年1月1日少于2009年2月1日(第一位数字1在2之前)。如果您有固定的宽度,并且从年份开始(例如2010-01-02),那么它应该可以正常工作


对于您拥有的数据,最好的选择是将每个字符串转换为一个日期,这样比较就很容易了。如果您能以某种方式将字段转换为datetime,那就最好了。在MS SQL Server中,您可以创建一个索引计算字段,该字段将字符串转换为日期和索引,以便快速查询。

如果它存储为字符串,则将其视为字符串。您不能比较这两个字符串
9/16/2010
30/11/2010
,而期望任何有用的东西(即第一位数字3在9之前)。第一个选择是介于“2010年1月1日”和“2010年11月30日”之间的
。如果你所有的数据都来自一年,它可能会工作,尽管我不确定不同数字(不是0填充)是否会工作。超过一年,2010年1月1日少于2009年2月1日(第一位数字1在2之前)。如果您有固定的宽度,并且从年份开始(例如2010-01-02),那么它应该可以正常工作

对于您拥有的数据,最好的选择是将每个字符串转换为一个日期,这样比较就很容易了。如果您能以某种方式将字段转换为datetime,那就最好了。在MS SQL Server中,您可以创建一个索引计算字段,该字段将字符串转换为日期和索引,以便快速查询

您好,我已将数据和时间存储为 varchar类型和数据如下所示 “2010年9月16日下午2:59:10”

不要那样做。如果您的数据库有日期/时间类型,请使用它们!如果没有(例如SQLite),则将日期按ISO 8601顺序存储(
2010-09-16 14:59:10
),以便正确排序

您好,我已将数据和时间存储为 varchar类型和数据如下所示 “2010年9月16日下午2:59:10”

不要那样做。如果您的数据库有日期/时间类型,请使用它们!如果没有(例如SQLite),则将日期按ISO 8601顺序存储(
2010-09-16 14:59:10
),以便正确排序