Sql Oracle get day name返回错误的名称

Sql Oracle get day name返回错误的名称,sql,oracle,oracle10g,Sql,Oracle,Oracle10g,我用它来获取给定日期的名称,因此下面给出了星期一: Select to_char(to_date('01/04/2013','dd/mm/yyyy'), 'DAY') from dual 然而,如果我对一个表应用相同的东西,并用它们的名称提取日期,我得到了一个错误的日期名称,在'01/April/2013'的情况下,它给了我星期六 Select to_char(to_date(myDateColumn,'dd/mm/yyyy'), 'DAY'), myDateColumn From

我用它来获取给定日期的名称,因此下面给出了星期一:

Select to_char(to_date('01/04/2013','dd/mm/yyyy'), 'DAY') from dual
然而,如果我对一个表应用相同的东西,并用它们的名称提取日期,我得到了一个错误的日期名称,在'01/April/2013'的情况下,它给了我星期六

    Select to_char(to_date(myDateColumn,'dd/mm/yyyy'), 'DAY'), myDateColumn 
From myTable WHERE myDateColumn = to_date('01/04/2013','dd/mm/yyyy')
这是我在MS SQL上应该做的,但我需要在Oracle 10g数据库上做这件事,这是正确的方法吗


谢谢

您似乎对myDateColumn的数据类型感到困惑

您的意思是,这是一个日期:

WHERE myDateColumn = to_date('01/04/2013','dd/mm/yyyy')
。。。但它也是一个字符串,带有:

to_char(to_date(myDateColumn,'dd/mm/yyyy'), 'DAY')

看看它到底是什么,不要将日期转换为日期或将字符串与日期进行比较。

因为日期列是日期:

Select to_char(myDateColumn, 'DAY'), myDateColumn 
From myTable 
WHERE myDateColumn = to_date('01/04/2013','dd/mm/yyyy')
应该足够了


(这应该是一个评论,不是一个答案,但它不可读)

这是对其他答案的部分跟进,但解释(希望)发生了什么

执行此操作时,假设
myDateColumn
DATE

to_char(to_date(myDateColumn,'dd/mm/yyyy'), 'DAY')
你有一个隐式转换;它确实在这样做:

to_char(to_date(to_char(myDateColumn),'dd/mm/yyyy'), 'DAY')
即:

to_char(to_date(to_char(myDateColumn, <NLS_DATE_FORMAT>),'dd/mm/yyyy'), 'DAY')
因此,即使您的
myDateColumn
确实包含
2013-04-01
,您的implicit转换意味着它被视为
0013-04-01
,这(显然)是一个星期六

您可以指定格式,并在
to_date()
中将其显式设置为
to_char()
,但希望很明显这是毫无意义的,而且按照vc74的建议执行会简单得多,只需删除额外的
to_date()
调用:

select to_char(myDateColumn, 'DAY'), ...
也许值得指出的是,
DAY
生成的文本也取决于您的NLS设置;例如,请参阅文档和。如果您想确保在英语中总是
星期一
,您可以强制将其作为转换的一部分,尽管我不认为这看起来会是一个考虑因素:

select to_char(myDateColumn, 'DAY', 'NLS_DATE_LANGUAGE=ENGLISH'), ...

谢谢,但是有to_char的原因是从日期中提取日期的名称。我指的是其中的to_date(),如果该列已经是日期,则不需要这样做。
select to_char(myDateColumn, 'DAY', 'NLS_DATE_LANGUAGE=ENGLISH'), ...