我有这个脚本:
select * from OPDN A
where A."DocDate" between '2020/01/01' and '2020/01/31'如何在WHERE子句中实现MM/DD/YYYY格式?
select * from OPDN A
where A."DocDate" between '01/01/2020' and '01/31/2020'列DocDate的类型为TimeStamp。
发布于 2020-03-04 11:59:35
如果列数据类型是TIMESTAMP,就像OP在对Sandra Rossi的优秀答案的评论中所写的那样,那么实际上需要进行三次转换才能使选择按预期工作。
DocDate转换为日期这看起来像这样:
select
*
from
OPDN A
where
to_date(A."DocDate") between to_date('01/01/2020', 'MM/DD/YYYY')
and to_date('01/31/2020', 'MM/DD/YYYY');在格式字符串的帮助下,选择参数的转换应该是显而易见的,并且结果是SQL date数据类型中的相同信息。
第三个转换(to_date(a."DocDate"))可能会令人惊讶,但它相当重要。
选择的工作方式是包括从选择期的最开始到最后的所有内容。如果输入筛选器简单地转换为时间戳,那么它们将具有00:00 (午夜)的时间分量,因为没有提供关于一天中的时间的细节。
这将导致排除午夜之后的所有"DocDate“值。
这里正确的比较级别是date,因此"DocDate“也需要转换为无小时的date数据类型。
附注:我刚刚意识到选择标准是以MM/DD/YYYY格式给出的,这可能是OP之前收到转换错误的原因。
发布于 2020-03-03 21:33:10
这取决于列DocDate的类型和格式。
TIMESTAMP.’。
DATE,TIME,SECONDDATE,YYYYMMDD针对每种情况的解决方案:
select * from OPDN A where A."DocDate" between to_date('01/01/2020','DD/MM/YYY') and to_date('01/31/2020', 'DD/MM/YYY'):
DocDate类型是NVARCHAR8,格式为YYYYMMDD:select * from OPDN A where A."DocDate" between '20200101' and '20200131'DocDate类型是DATE:发布于 2020-03-03 14:04:41
在Oracle中,它可以做到这一点
select * from OPDN A
where to_date(A."DocDate", 'DD/MM/YYY') between to_date('01/01/2020','DD/MM/YYY') and to_date('01/31/2020', 'DD/MM/YYY');https://stackoverflow.com/questions/60500681
复制相似问题