Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.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
Python 在某些特定情况下,Cx_oracle在日期字段中缩减年份_Python_Cx Oracle - Fatal编程技术网

Python 在某些特定情况下,Cx_oracle在日期字段中缩减年份

Python 在某些特定情况下,Cx_oracle在日期字段中缩减年份,python,cx-oracle,Python,Cx Oracle,在使用python和Oracle处理日期时,我遇到了下一个问题 这个很好用: In [29]: cursor.execute("SELECT TO_DATE('23.09.2015','DD.MM.YYYY') FROM dual") Out[29]: <cx_Oracle.Cursor on <cx_Oracle.Connection to web@hdb:1521/db11>> In [30]: cursor.fetchone() Out[30]: (datetim

在使用python和Oracle处理日期时,我遇到了下一个问题

这个很好用:

In [29]: cursor.execute("SELECT TO_DATE('23.09.2015','DD.MM.YYYY') FROM dual")
Out[29]: <cx_Oracle.Cursor on <cx_Oracle.Connection to web@hdb:1521/db11>>

In [30]: cursor.fetchone()
Out[30]: (datetime.datetime(2015, 9, 23, 0, 0),)
在这里:

In [36]: cursor.execute("SELECT TO_DATE(sysdate,'DD.MM.YYYY') FROM dual")
Out[36]: <cx_Oracle.Cursor on <cx_Oracle.Connection to web@hdb:1521/db11>>

In [37]: cursor.fetchone()
Out[37]: (datetime.datetime(15, 9, 23, 0, 0),)
但我认为我的工具可以在没有任何特定限制的情况下处理用户定义的DB对象(包括视图)。不幸的是,这个问题不能让我正确处理日期,目前我找不到任何合适的解决方案

编辑。Rajesh的asnwer之后的工作示例:

In [104]: cursor.execute("ALTER SESSION SET NLS_DATE_FORMAT='DD.MM.YYYY'")

In [105]: cursor.execute("SELECT TO_DATE(sysdate,'DD.MM.YYYY') FROM dual")
Out[105]: <cx_Oracle.Cursor on <cx_Oracle.Connection to web@hdb:1521/db11>>

In [106]: cursor.fetchone()
Out[106]: (datetime.datetime(2015, 9, 23, 0, 0),)
[104]中的
:cursor.execute(“ALTER SESSION SET NLS\u DATE\u FORMAT='DD.MM.yyyyy'))
在[105]中:cursor.execute(“从dual中选择TO_DATE(sysdate,'DD.MM.YYYY'))
出[105]:
在[106]中:cursor.fetchone()
Out[106]:(datetime.datetime(2015,9,23,0,0),)

这个问题的简单答案是不要再次使用日期函数

您的转换函数应该是

a)
到日期(字符串列,'string\u表示法')
如果您试图将某物转换为日期

b)
to_char(日期列,'string\u表示法')
如果您试图将某物从日期转换为字符串,通常用于报告、后台打印或打印


如果您想了解wierd行为,可以查看会话的NLS设置。当您说TO_DATE(sysdate,…)时,TO_DATE需要一个字符串,所以我认为Oracle会尝试隐式地将sysdate转换为strng。在当前会话中使用NLS\U DATE\U格式进行此操作。

干杯!谢谢你的问候!我已经把工作的例子放在主要的postHi-Oleg中-我仍然不明白为什么你需要一个约会。在您的代码中,您的变量“a”定义为什么?从上一个示例中删除了变量“a”,这样就不会混淆任何人,它是从我的测试中意外派生出来的。我不需要
在那里输入日期,因为我可以使用
trunc
进行日期舍入,但我不能保证用户会避免,我在他们之前遇到过这种行为,这很酷。实际上,我一直在sql视图中使用
to_date
进行日期舍入,因为我从未怀疑过这样的aspectok。因此,正确的解决方案是,如果要输出日期,使用trunc(sysdate),如果要分配/返回字符串数据类型,则使用char(sysdate,'string format')。无论采用哪种方式,都不需要使用截止日期(sysdate)。希望这是明确的:)
In [36]: cursor.execute("SELECT TO_DATE(sysdate,'DD.MM.YYYY') FROM dual")
Out[36]: <cx_Oracle.Cursor on <cx_Oracle.Connection to web@hdb:1521/db11>>

In [37]: cursor.fetchone()
Out[37]: (datetime.datetime(15, 9, 23, 0, 0),)
In [39]: cursor.execute("SELECT TRUNC(sysdate) FROM dual")
Out[39]: <cx_Oracle.Cursor on <cx_Oracle.Connection to web@hdb:1521/db11>>

In [40]: cursor.fetchone()
Out[40]: (datetime.datetime(2015, 9, 23, 0, 0),)
In [104]: cursor.execute("ALTER SESSION SET NLS_DATE_FORMAT='DD.MM.YYYY'")

In [105]: cursor.execute("SELECT TO_DATE(sysdate,'DD.MM.YYYY') FROM dual")
Out[105]: <cx_Oracle.Cursor on <cx_Oracle.Connection to web@hdb:1521/db11>>

In [106]: cursor.fetchone()
Out[106]: (datetime.datetime(2015, 9, 23, 0, 0),)