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'), ...