Sql 如何在何处设置日期格式?

Sql 如何在何处设置日期格式?,sql,hana,sapb1,Sql,Hana,Sapb1,我有这个剧本: 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。在Oracle中,它可以做到这一点 select * from OPDN

我有这个剧本:

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。

在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');

在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');

这取决于DocDate列的类型和格式

在SAP ERP软件R/3、ECC、S/4HANA中,日期在历史上被定义为8个字符的NVARCHAR类型,格式为“YYYYMMDD”

在SAP Business One中,我不知道

在SAP HANA数据库中,还有四种特定类型:日期、时间、秒日期、时间戳

每种情况的解决方案:

如果DocDate类型为格式为YYYYMMDD的NVARCHAR 8:从OPDN A中选择*,其中A.DocDate介于“20200101”和“20200131”之间

在SAP Business One中,我不知道

如果DocDate类型为DATE:从OPDN A中选择*,其中A.DocDate介于至日期'01/01/2020','DD/MM/YYY'和至日期'01/31/2020','DD/MM/YYY'之间


这取决于DocDate列的类型和格式

在SAP ERP软件R/3、ECC、S/4HANA中,日期在历史上被定义为8个字符的NVARCHAR类型,格式为“YYYYMMDD”

在SAP Business One中,我不知道

在SAP HANA数据库中,还有四种特定类型:日期、时间、秒日期、时间戳

每种情况的解决方案:

如果DocDate类型为格式为YYYYMMDD的NVARCHAR 8:从OPDN A中选择*,其中A.DocDate介于“20200101”和“20200131”之间

在SAP Business One中,我不知道

如果DocDate类型为DATE:从OPDN A中选择*,其中A.DocDate介于至日期'01/01/2020','DD/MM/YYY'和至日期'01/31/2020','DD/MM/YYY'之间


如果列数据类型是TIMESTAMP,正如OP在对Sandra Rossi的优秀答案的评论中所写的那样,那么实际上需要进行三次转换才能使选择按预期工作

将第一个选择参数在。。。约会 将第二个选择参数在。。。和b约会 将时间戳列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日期数据类型中是相同的信息。 对_datea.DocDate的第三次转换可能令人惊讶,但相当重要

选择的工作方式是包括从选择期开始到结束的所有内容。如果将输入过滤器简单地转换为时间戳,那么它们将具有午夜00:00的时间分量,因为没有提供关于一天时间的详细信息。 这将导致排除午夜后的所有DocDate值

这里正确的比较级别是date,因此DocDate也需要转换为少小时的日期数据类型


p、 我刚刚意识到选择标准是以MM/DD/YYYY格式给出的,这可能是OP之前收到的转换错误的原因

如果列数据类型是TIMESTAMP,正如OP在对Sandra Rossi的优秀答案的评论中所写的那样,那么实际上需要进行三次转换才能使选择按预期工作

将第一个选择参数在。。。约会 将第二个选择参数在。。。和b约会 将时间戳列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日期数据类型中是相同的信息。 对_datea.DocDate的第三次转换可能令人惊讶,但相当重要

选择的工作方式是包括从选择期开始到结束的所有内容。如果将输入过滤器简单地转换为时间戳,那么它们将具有午夜00:00的时间分量,因为没有提供关于一天时间的详细信息。 这将导致排除午夜后的所有DocDate值

这里正确的比较级别是date,因此DocDate也需要转换为少小时的日期数据类型


p、 我刚刚意识到选择标准是以MM/DD/YYYY格式给出的,这可能是OP之前收到的转换错误的原因

您正在使用哪个数据库?SAP中的SQL脚本这是否回答了您的问题@CarloAngeles请澄清你的问题。我认为你在使用BEVERY子句时对日期格式有问题。。试着在日期'01-01-2020'和'MM-DD-YYYY'之间切换,您会收到什么错误消息?列的数据类型是什么?是日期数据类型还是仅存储日期的VARCHAR字符串列?您使用的是哪个数据库?SAP中的SQL脚本这是否回答了您的问题@CarloAngeles请澄清你的问题。我认为你在使用BEVERY子句时对日期格式有问题。。试着在日期'01-01-2020'和'MM-DD-YYYY'之间切换,您会收到什么错误消息?列的数据类型是什么
属于是日期数据类型还是仅存储日期的VARCHAR字符串列?我尝试了解决方案3,但我想我无法实现,因为DocDate是TimeStamp。@CarloAngeles请放弃我的答案,因为DocDate类型是TimeStamp,我不回答此案例。此外,您的SAP软件似乎是SAP Business One,您确认了吗?我也不回答这个问题。我尝试了解决方案3,但我想我无法实现这一点,因为DocDate是TimeStamp。@CarloAngeles请放弃我的回答,因为DocDate类型是TimeStamp,我不回答这个问题。此外,您的SAP软件似乎是您确认的SAP Business One?,我也不回答这个问题。