不使用sql中的BEVERY语句访问值
我将日期存储为数据库中的varchar。当我试图使用sql中的不使用sql中的BEVERY语句访问值,sql,date,varchar,between,Sql,Date,Varchar,Between,我将日期存储为数据库中的varchar。当我试图使用sql中的between操作符访问某些数据以获取某些日期之间的值时,它没有给出正确的输出,因为我将日期存储为varchar。日期的格式为(2013年12月1日)(dd/mm/yyyy) 有没有想过在不将日期从varchar更改为date格式的情况下使用between语句访问正确的数据 谢谢。您将日期存储为varchar,然后使用to_date函数转换为日期格式,然后在操作员之间使用: 试试这个 SELECT * FROM orders WHER
between
操作符访问某些数据以获取某些日期之间的值时,它没有给出正确的输出,因为我将日期存储为varchar。日期的格式为(2013年12月1日)(dd/mm/yyyy)
有没有想过在不将日期从varchar更改为date格式的情况下使用between语句访问正确的数据
谢谢。您将日期存储为varchar,然后使用to_date函数转换为日期格式,然后在操作员之间使用: 试试这个
SELECT *
FROM orders
WHERE to_date(order_date, 'dd/mm/yyyy') between to_date ('01/12/2012', 'dd/mm/yyyy')
AND to_date ('31/12/2012', 'dd/mm/yyyy');
将日期存储为varchar,然后使用to_date函数将其转换为日期格式,然后在运算符之间使用: 试试这个
SELECT *
FROM orders
WHERE to_date(order_date, 'dd/mm/yyyy') between to_date ('01/12/2012', 'dd/mm/yyyy')
AND to_date ('31/12/2012', 'dd/mm/yyyy');
以防万一,如果您使用MS SQL:
SELECT *
FROM orders
WHERE CONVERT(DATETIME,order_date,101) between CONVERT(DATETIME,'01/12/2012',101)
AND CONVERT(DATETIME,'31/12/2012',101);
以防万一,如果您使用MS SQL:
SELECT *
FROM orders
WHERE CONVERT(DATETIME,order_date,101) between CONVERT(DATETIME,'01/12/2012',101)
AND CONVERT(DATETIME,'31/12/2012',101);
只需编写以下查询
select *
from table
where str_to_date('01/01/2013','%m%d%Y') between '2012-01-02' and '2013-01-02'
只需编写以下查询
select *
from table
where str_to_date('01/01/2013','%m%d%Y') between '2012-01-02' and '2013-01-02'
基本上,如果我没有错的话,您是在试图寻找不改变数据格式的解决方案。 若未明确提及,则操作员无法理解数据为日期。所以你必须说这个字段是日期。每个数据库中都有类似的函数,如date()、to_date()。由于我不知道您使用的是哪一个数据库,因此无法给出如何解析它的确切语法。
但我相信你会很容易找到的。如果需要更多细节,请告诉我 如果我没有错的话,基本上你是在不改变数据格式的情况下寻找解决方案。 若未明确提及,则操作员无法理解数据为日期。所以你必须说这个字段是日期。每个数据库中都有类似的函数,如date()、to_date()。由于我不知道您使用的是哪一个数据库,因此无法给出如何解析它的确切语法。
但我相信你会很容易找到的。如果需要更多细节,请告诉我 不要混淆数据类型-它与您的问题无关。如果删除日期中的/以获得真实数字,您会看到这一点:2013年2月20日实际上比2014年2月1日高出2100多万 2013年2月20日=20022013
2014年2月1日=2014年10月10日 如果varchar中的数字是按日期、月份、年份的顺序排列的,则必须在字段或查询中对其进行重新排序,以获得正确的值,但如果它们是在年-月-日中,则有一个varchar,其排序方式与datetime类似 解决方案1: 如果必须保持表格中的状态,则必须执行以下操作: 数据库表:
CREATE TABLE `dates` (
`date_varchar` varchar(15) DEFAULT NULL,
`date_datetime` datetime DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8
数据:
date_varchar date_datetime
01/02/2013 2013-02-01 00:00:00
02/02/2013 2013-02-02 00:00:00
03/02/2013 2013-02-03 00:00:00
03/02/2014 2014-02-03 00:00:00
03/03/2013 2013-03-03 00:00:00
04/02/2013 2013-02-04 00:00:00
05/02/2013 2013-02-05 00:00:00
date_varchar date_datetime
01/02/2013 2013-02-01 00:00:00
02/02/2013 2013-02-02 00:00:00
03/02/2013 2013-02-03 00:00:00
03/02/2014 2014-02-03 00:00:00
03/03/2013 2013-03-03 00:00:00
04/02/2013 2013-02-04 00:00:00
05/02/2013 2013-02-05 00:00:00
SELECT *
FROM dates
WHERE date_varchar
BETWEEN '03/02/2013' AND '04/02/2013'
date_varchar date_datetime
03/02/2013 2013-02-05 00:00:00
03/02/2014 2014-02-03 00:00:00
03/03/2013 2013-02-05 00:00:00
04/02/2013 2013-02-03 00:00:00
查询:
SELECT *
FROM dates
WHERE STR_TO_DATE(date_varchar,'%d/%m/%Y')
BETWEEN '2013-02-03' AND '2013-02-04'
将返回两条记录:
date_varchar date_datetime
03/02/2013 2013-02-03 00:00:00
04/02/2013 2013-02-04 00:00:00
解决方案2:
将varchar中的顺序更改为字段中的年、月、日。请参阅下表数据:
date_varchar date_datetime
2013/02/01 2013-02-01 00:00:00
2013/02/02 2013-02-02 00:00:00
2013/02/03 2013-02-03 00:00:00
2013/02/04 2013-02-04 00:00:00
2013/02/05 2013-02-05 00:00:00
2013/03/03 2013-03-03 00:00:00
2014/02/03 2014-02-03 00:00:00
现在,您可以选择:
SELECT *
FROM dates
WHERE date_varchar
BETWEEN '2013/02/02' AND '2013/02/03'
现在,数字的排序方式与datetime相同-您只需删除/和-即可查看数字。所以varchar的排序与date\u time相同
查询返回相同的两行:
date_varchar date_datetime
2013/02/02 2013-02-02 00:00:00
2013/02/03 2013-02-03 00:00:00
解决方案3:
这不是为您准备的,因为您不想更改表,但我将其包括在内以使其完整。通过将数据类型更改为datetime,您必须将数字按正确顺序排列,并使用此查询获取日期之间的范围:
SELECT *
FROM dates
WHERE date_datetime
BETWEEN '2013-02-03' AND '2013-02-04'
同样的两条记录:
date_varchar date_datetime
03/02/2013 2013-02-03 00:00:00
04/02/2013 2013-02-04 00:00:00
问题示例:
现在,只需选择varchar返回的日期—您猜对了—两条记录完全相同,如first query和其他一些记录,就像发生在您身上的事情一样:
数据:
date_varchar date_datetime
01/02/2013 2013-02-01 00:00:00
02/02/2013 2013-02-02 00:00:00
03/02/2013 2013-02-03 00:00:00
03/02/2014 2014-02-03 00:00:00
03/03/2013 2013-03-03 00:00:00
04/02/2013 2013-02-04 00:00:00
05/02/2013 2013-02-05 00:00:00
date_varchar date_datetime
01/02/2013 2013-02-01 00:00:00
02/02/2013 2013-02-02 00:00:00
03/02/2013 2013-02-03 00:00:00
03/02/2014 2014-02-03 00:00:00
03/03/2013 2013-03-03 00:00:00
04/02/2013 2013-02-04 00:00:00
05/02/2013 2013-02-05 00:00:00
SELECT *
FROM dates
WHERE date_varchar
BETWEEN '03/02/2013' AND '04/02/2013'
date_varchar date_datetime
03/02/2013 2013-02-05 00:00:00
03/02/2014 2014-02-03 00:00:00
03/03/2013 2013-02-05 00:00:00
04/02/2013 2013-02-03 00:00:00
不要对数据类型感到困惑——它与您的问题无关。如果删除日期中的/以获得真实数字,您会看到这一点:2013年2月20日实际上比2014年2月1日高出2100多万 2013年2月20日=20022013
2014年2月1日=2014年10月10日 如果varchar中的数字是按日期、月份、年份的顺序排列的,则必须在字段或查询中对其进行重新排序,以获得正确的值,但如果它们是在年-月-日中,则有一个varchar,其排序方式与datetime类似 解决方案1: 如果必须保持表格中的状态,则必须执行以下操作: 数据库表:
CREATE TABLE `dates` (
`date_varchar` varchar(15) DEFAULT NULL,
`date_datetime` datetime DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8
数据:
date_varchar date_datetime
01/02/2013 2013-02-01 00:00:00
02/02/2013 2013-02-02 00:00:00
03/02/2013 2013-02-03 00:00:00
03/02/2014 2014-02-03 00:00:00
03/03/2013 2013-03-03 00:00:00
04/02/2013 2013-02-04 00:00:00
05/02/2013 2013-02-05 00:00:00
date_varchar date_datetime
01/02/2013 2013-02-01 00:00:00
02/02/2013 2013-02-02 00:00:00
03/02/2013 2013-02-03 00:00:00
03/02/2014 2014-02-03 00:00:00
03/03/2013 2013-03-03 00:00:00
04/02/2013 2013-02-04 00:00:00
05/02/2013 2013-02-05 00:00:00
SELECT *
FROM dates
WHERE date_varchar
BETWEEN '03/02/2013' AND '04/02/2013'
date_varchar date_datetime
03/02/2013 2013-02-05 00:00:00
03/02/2014 2014-02-03 00:00:00
03/03/2013 2013-02-05 00:00:00
04/02/2013 2013-02-03 00:00:00
查询:
SELECT *
FROM dates
WHERE STR_TO_DATE(date_varchar,'%d/%m/%Y')
BETWEEN '2013-02-03' AND '2013-02-04'
将返回两条记录:
date_varchar date_datetime
03/02/2013 2013-02-03 00:00:00
04/02/2013 2013-02-04 00:00:00
解决方案2:
将varchar中的顺序更改为字段中的年、月、日。请参阅下表数据:
date_varchar date_datetime
2013/02/01 2013-02-01 00:00:00
2013/02/02 2013-02-02 00:00:00
2013/02/03 2013-02-03 00:00:00
2013/02/04 2013-02-04 00:00:00
2013/02/05 2013-02-05 00:00:00
2013/03/03 2013-03-03 00:00:00
2014/02/03 2014-02-03 00:00:00
现在,您可以选择:
SELECT *
FROM dates
WHERE date_varchar
BETWEEN '2013/02/02' AND '2013/02/03'
现在,数字的排序方式与datetime相同-您只需删除/和-即可查看数字。所以varchar的排序与date\u time相同
查询返回相同的两行:
date_varchar date_datetime
2013/02/02 2013-02-02 00:00:00
2013/02/03 2013-02-03 00:00:00
解决方案3:
这不是为您准备的,因为您不想更改表,但我将其包括在内以使其完整。通过将数据类型更改为datetime,您必须将数字按正确顺序排列,并使用此查询获取日期之间的范围:
SELECT *
FROM dates
WHERE date_datetime
BETWEEN '2013-02-03' AND '2013-02-04'
同样的两条记录:
date_varchar date_datetime
03/02/2013 2013-02-03 00:00:00
04/02/2013 2013-02-04 00:00:00
问题示例:
现在,只需选择varchar返回的日期—您猜对了—两条记录完全相同,如first query和其他一些记录,就像发生在您身上的事情一样:
数据:
date_varchar date_datetime
01/02/2013 2013-02-01 00:00:00
02/02/2013 2013-02-02 00:00:00
03/02/2013 2013-02-03 00:00:00
03/02/2014 2014-02-03 00:00:00
03/03/2013 2013-03-03 00:00:00
04/02/2013 2013-02-04 00:00:00
05/02/2013 2013-02-05 00:00:00
date_varchar date_datetime
01/02/2013 2013-02-01 00:00:00
02/02/2013 2013-02-02 00:00:00
03/02/2013 2013-02-03 00:00:00
03/02/2014 2014-02-03 00:00:00
03/03/2013 2013-03-03 00:00:00
04/02/2013 2013-02-04 00:00:00
05/02/2013 2013-02-05 00:00:00
SELECT *
FROM dates
WHERE date_varchar
BETWEEN '03/02/2013' AND '04/02/2013'
date_varchar date_datetime
03/02/2013 2013-02-05 00:00:00
03/02/2014 2014-02-03 00:00:00
03/03/2013 2013-02-05 00:00:00
04/02/2013 2013-02-03 00:00:00
您至少可以在where子句中使用TOU date…您至少可以在where子句中使用TOU date…欢迎使用StackOverflow:如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,并单击编辑器工具栏上的“代码示例”按钮(
{}
),以很好地格式化和语法突出显示它!欢迎使用StackOverflow:如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,并单击编辑器工具栏上的“代码示例”按钮({}
),以精确地格式化和语法突出显示它!如果在表中找到,您的上一次查询还将返回例如“03/03/2013”和“03/02/2014”。如果在表中找到,您的上一次查询还将返回例如“03/03/2013”和“03/02/2014”。