Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 选择日期字段位于两个日期之间的两个日期之间的数据_Sql_Oracle - Fatal编程技术网

Sql 选择日期字段位于两个日期之间的两个日期之间的数据

Sql 选择日期字段位于两个日期之间的两个日期之间的数据,sql,oracle,Sql,Oracle,我遇到以下查询,并遇到错误:不是有效月份。救命啊 SELECT * FROM TABLE1 WHERE Field1 = '12345' AND TO_DATE('4/28/2014 12:00:00 AM') BETWEEN TO_DATE(DATE1) AND TO_DATE(DATE2); 感谢月,因为截止日期需要两位数,所以您需要: SELECT * FROM TABLE1 WHERE Field1 = '12345' AND TO_DATE('04/28/2014 12:

我遇到以下查询,并遇到错误:不是有效月份。救命啊

SELECT * FROM TABLE1
WHERE Field1 = '12345' AND
      TO_DATE('4/28/2014 12:00:00 AM') BETWEEN TO_DATE(DATE1) AND TO_DATE(DATE2);

感谢

月,因为截止日期需要两位数,所以您需要:

SELECT * FROM TABLE1 WHERE Field1 = '12345' AND TO_DATE('04/28/2014 12:00:00 AM') BETWEEN     TO_DATE(DATE1) AND TO_DATE(DATE2);

参考更多信息,如果你还没有。具有格式掩码有助于定义字符串,以防将来发生更改。

截止日期的月份需要两位数,因此您需要:

SELECT * FROM TABLE1 WHERE Field1 = '12345' AND TO_DATE('04/28/2014 12:00:00 AM') BETWEEN     TO_DATE(DATE1) AND TO_DATE(DATE2);

参考更多信息,如果你还没有。如果将来发生更改,使用格式掩码可以帮助定义字符串。

您需要为日期转换指定格式掩码。您的
NLS\u DATE\u格式
可能是
DD/MM/YYYY
,包含或不包含时间部分。您正在以不同的格式传递日期。您永远不应该依赖NLS设置。实际上,请在查询中提供以下内容的格式掩码:

SELECT *
FROM TABLE1
WHERE Field1 = '12345'
AND TO_DATE('4/28/2014 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM')
  BETWEEN DATE1 AND DATE2;
我假设
DATE1
DATE2
已经是
DATE
类型,在这种情况下,不需要调用
来更新日期;所要做的就是使用
NLS\u DATE\u格式
将它们转换为字符串或从字符串转换回字符串,这要么毫无意义,要么与
TRUNC()
相同,具体取决于设置方式

当然,您在这里使用的日期是午夜,因此指定时间并不意味着添加任何内容;如果你永远不会有领带部分,那么你可以:

AND TO_DATE('4/28/2014', 'MM/DD/YYYY') BETWEEN DATE1 AND DATE2;

如果
field1
是数字,那么在
12345
周围也不应该有引号,只需将一个隐式
添加到\u NUMBER()


但是,如果您将数字和/或日期存储为字符串,那么您真的应该三思而后行。希望这不是您实际正在做的…

您需要为日期转换指定格式掩码。您的
NLS\u DATE\u格式
可能是
DD/MM/YYYY
,包含或不包含时间部分。您正在以不同的格式传递日期。您永远不应该依赖NLS设置。实际上,请在查询中提供以下内容的格式掩码:

SELECT *
FROM TABLE1
WHERE Field1 = '12345'
AND TO_DATE('4/28/2014 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM')
  BETWEEN DATE1 AND DATE2;
我假设
DATE1
DATE2
已经是
DATE
类型,在这种情况下,不需要调用
来更新日期;所要做的就是使用
NLS\u DATE\u格式
将它们转换为字符串或从字符串转换回字符串,这要么毫无意义,要么与
TRUNC()
相同,具体取决于设置方式

当然,您在这里使用的日期是午夜,因此指定时间并不意味着添加任何内容;如果你永远不会有领带部分,那么你可以:

AND TO_DATE('4/28/2014', 'MM/DD/YYYY') BETWEEN DATE1 AND DATE2;

如果
field1
是数字,那么在
12345
周围也不应该有引号,只需将一个隐式
添加到\u NUMBER()


但是,如果您将数字和/或日期存储为字符串,那么您真的应该三思而后行。希望这不是你正在做的事情…

请改进你的问题,Date1和Date2是什么?RDBMS的默认日期格式是什么?如果您不知道,可能您的问题只是将正确的日期掩码传递给to_date函数…DATE1和DATE2是oracle时间戳和表1的两列。请改进您的问题,DATE1和DATE2是什么?RDBMS的默认日期格式是什么?如果您不知道,可能您的问题只是将正确的日期掩码传递给to_date函数…DATE1和DATE2是oracle时间戳和TABLE1的两列。oracle足够聪明,可以在需要时添加填充。有时,它在日期转换方面出人意料地灵活<代码>截止日期('2014年4月28日','MM-DD-YYYY')
起作用,例如。仅仅缺少一个前导零肯定是好的;迄今为止('2014年4月28日','MM/DD/YYYY')
没有问题,除了样式*8-,Oracle足够聪明,可以在需要的地方添加填充。有时,它在日期转换方面出人意料地灵活<代码>截止日期('2014年4月28日','MM-DD-YYYY')起作用,例如。仅仅缺少一个前导零肯定是好的;迄今为止('2014年4月28日','MM/DD/YYYY')的
没有问题,除了样式*8-)极好!此查询有效:从表1中选择*字段1='12345'和日期1和日期2之间的截止日期('2014年4月28日12:00:00 AM','MM/DD/YYYY HH:MI:SS AM');非常感谢mych@Alex Poole如果时间格式为PM怎么办?有没有办法同时传递AM和PM的格式掩码?@user1100941-您可以在格式模型中使用
AM
PM
,以您喜欢的为准;并且其中一个将接受值为AM或PM。他们不会限制你只在中午之前或中午之后才有值。太棒了!此查询有效:从表1中选择*字段1='12345'和日期1和日期2之间的截止日期('2014年4月28日12:00:00 AM','MM/DD/YYYY HH:MI:SS AM');非常感谢mych@Alex Poole如果时间格式为PM怎么办?有没有办法同时传递AM和PM的格式掩码?@user1100941-您可以在格式模型中使用
AM
PM
,以您喜欢的为准;并且其中一个将接受值为AM或PM。它们不会将您限制为只有中午之前或中午之后的值。