为什么此查询无法在oracle select to_date('01-jan-2016',day dd ddspth month yyyy) from dual;
上运行?为什么日期功能不能输出我们想要的格式?
为什么to_char
函数不能在运行时运行?为什么它只能在sysdate
或else
等任何属性中运行?
我知道select to_char(to_date('01-jan-2016',day-month-yyyy) from dual;
是在oracle上运行的,但是我想在运行时只运行它而没有像select to_char('01-jan-2016',day-month-yyyy) from dual;
那样的任何特定属性。同样的情况适用于to_date
函数。
答案 0 :(得分:1)
为什么此查询无法在oracle
select to_date('01-jan-2016',day dd ddspth month yyyy) from dual;
上运行?为什么日期函数不给输出 我们的愿望格式?
由于您违反了正确的语法,查询将无法运行。检查Oracle文档和在此处发布问题几乎一样容易。 to_date
采用字符串参数,你做得很好。 '01-jan-2016'
没问题。第二个参数应该告诉编译器确切的字符串使用了什么格式。您的字符串为'01-jan-2016'
,但您提供了格式模型'day dd ddspth month yyyy'
- 它与'01-jan-2016'
之间没有任何关联。不是Oracle的错(或者论坛上的任何人的错误),所以你可以更好地提问。
您的格式为dd
(日,两位数),然后是短划线(-
),然后是英文的月份简称,所有小写字母,然后是短划线({{1} }),然后是一年(四位数)。正确的掩码是-
试试这个:
'dd-mon-yyyy'
关于这一点的几件事。首先,此解决方案假定您的会话日期语言是英语或美国语等;如果是意大利语或中文,select to_date('01-jan-2016', 'dd-mon-yyyy') from dual;
将不被视为有效月份名称(简称)。如果实际上您收到错误消息Ora-01843,"而不是有效的月份",请首先检查以确保jan拼写正确,然后检查您的NLS_DATE_LANGUAGE参数。
其次,你询问"日期功能"给出"输出到我们想要的格式。"请详细了解日期和字符串之间的区别。日期没有格式。字符串。以编写查询的方式调用jan
将显示日期,而不是字符串。它会根据您的NLS_DATE_FORMAT参数显示给您。您可以使用to_date()
如果您想以select * from nls_session_parameters;
格式输入日期,并且希望结果是另一个字符串,显示相同的日期但格式不同,则必须先将字符串'01-jan-2016'
翻译为约会 - 我告诉你如何做到这一点。然后,你必须把它放在'01-jan-2016'
的调用中,它将获取日期并以字符串形式呈现,以你想要的任何(其他)格式。像这样:
to_char()
结果如下(请注意列名称 - 如果您不在select to_char(to_date('01-jan-2016', 'dd-mon-yyyy'), 'day dd ddspth month yyyy')
from dual;
语句中使用别名,那么您将获得垃圾名称):
select
请注意TO_CHAR(TO_DATE('01-JAN-2016','DD
---------------------------------
friday 01 first january 2016
和friday
之间的多个空格。格式模型' day'创建一个长度等于英文中最长的星期几名称的字符串。这将是9周三的长度。较短的名称将填充到右侧,空格为最大长度。还要注意星期五和一月的名字,都是小写的;如果你想要大写的首字母(按惯例用英语),你应该在格式掩码中使用日和月而不是日和月。
最后,您的查询还有另一个错误。格式掩码必须是一个字符串(用单引号括起来)。你没有这样做,所以你会得到一条错误信息,即使其他一切都是正确的。
我不理解你的第二和第三段(这很可能意味着它们是荒谬的,因为我的英语非常好);如果你改写它们以便它们有意义,你仍然可以让志愿者愿意帮助你,特别是如果你表现出更多的尊重。祝你好运!
答案 1 :(得分:0)
输出格式是一个字符串,所以它需要引号,所以你试试:
select to_char('01-jan-2016', 'day dd ddspth month yyyy')
from dual;
或者我更喜欢:
select to_char(date '2016-01-01', 'day dd ddspth month yyyy')
from dual;
正确的功能是to_char()
,而不是to_date()
。