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 日期为DD-MMM-YYYY格式,如2015年1月29日_Sql_Oracle_Date - Fatal编程技术网

Sql 日期为DD-MMM-YYYY格式,如2015年1月29日

Sql 日期为DD-MMM-YYYY格式,如2015年1月29日,sql,oracle,date,Sql,Oracle,Date,我希望日期采用DD-MMM-YYYY格式,如2015年1月29日 我试过下面的问题 SELECT TRIM(TO_DATE('29 Jan 2015' ,'DD MON YY')) FROM DUAL 我得到的结果是:2015年1月29日 但我期待着:2015年1月29日日期格式而非字符格式你能试试吗: SELECT TRIM(TO_DATE(SYSDATE ,'DD MON YYYY')) FROM DUAL YY只显示2个密码,而不是显示4个密码的yyy。

我希望日期采用
DD-MMM-YYYY
格式,如2015年1月29日

我试过下面的问题

SELECT TRIM(TO_DATE('29 Jan 2015'
                ,'DD MON YY')) FROM DUAL
我得到的结果是:2015年1月29日

但我期待着:
2015年1月29日
日期格式而非字符格式

你能试试吗:

SELECT TRIM(TO_DATE(SYSDATE ,'DD MON YYYY')) FROM DUAL
YY
只显示2个密码,而不是显示4个密码的
yyy

使用
CONVERT(VARCHAR(11),GETDATE(),106)

请参见此处的详细说明:

我假设Oracle数据库:

select to_char(SYSDATE, 'dd-Mon-yyyy') from dual
返回

29-Jan-2015

马努是对的。Oracle发布日期格式说明符的完整列表


在SQL Server中查询

select CONVERT(nvarchar, GETDATE(), 106) as [Converted Date]
返回:

29 Jan 2015

您要做的是使用字符串“2015年1月29日”,并使用格式“DD MON YY”将其设置为日期。当然,对于与“yy”不匹配的“2015”来说,这应该是失败的,但甲骨文在这方面是宽容的

然后在日期上使用TRIM。但修剪是为了弦。发生的事情是,你会看到'1月29日15'。我将看到“29.01.15”而不是通常的“29.01.2015”。但是行为:不要在日期上使用TRIM,据我所知,它的行为没有指定。使用TO_CHAR设置输出中日期的格式

如果您只选择一个不带字符的日期,则会以某种标准格式显示该日期,可以是“2015年1月29日”或“2015年1月29日”或“2015年1月29日”或“2015年1月29日”或“2015年1月29日”,具体取决于您使用的应用程序和可能的某些设置

为了完整性起见:

TO_DATE接受一个字符串(在您的示例中为“2015年1月29日”),并将其转换为日期。如果字符串包含名称,请确保指定适当的语言设置:

TO_DATE('29 Jan 2015', 'dd mon yyyy', ''NLS_DATE_LANGUAGE=AMERICAN')
要从日期获取格式化字符串,请使用To_CHAR:

TO_CHAR(sysdate, 'dd MON yyyy', 'NLS_DATE_LANGUAGE=AMERICAN')
然而,通常你不会这么做。您可以按原样选择日期,并让您的应用程序(用PHP、Java或其他语言编写)关注如何根据用户的计算机设置适当地显示日期。

谢谢您的回答。 我找到了解决办法。首先,我们需要对会话进行如下更改:

alter session set nls_date_format='DD-MON-YYYY'

然后运行查询: 选择修剪(截止日期('2015年1月29日' ,'DD MON YYYY')) 来自双重
现在我得到的结果是:2015年1月29日

截止日期(SYSDATE,'DD-MON-yyy')?
截止日期(SYSDATE,'DD-MON-YY')
完全是胡说八道。您正在将
日期
隐式转换为字符串,只是为了再次将其转换回
日期
。如果要格式化特定日期,请使用
to_CHAR()
而不是
to_date()
。而且您不需要
TRIM()
。只需
到字符(SYSDATE,'DD-MON-YYYY')
。我在我的项目中有一个表,其中有CHAR列,它的值为'09 jan 2014'。从dual中选择TRIM(截止日期('2004年1月14日','DD-MON-YY'))。我想要的是日期格式的结果,而不是字符。很抱歉在我的查询中以sysdate的形式给出。
TO_date(sysdate,'DD MON YYYY')
对于您的查询是不合理的,结果将是2015年1月29日而不是2015年1月29日。我有一个错误的问题,这是正确的选择修剪(截止日期('2004年1月14日','DD-MON-YYYY'))从双。我不是2004年1月14日,这对Oracle来说是无效的。(另外,您应该避免出错)这是SQL Server语法,而不是Oracle。这不是答案。另外,manu是不正确的,因为在
日期
上的
to_date()
没有意义。另外:只有链接的答案是皱眉在此道歉-意味着rbm和to_字符。我期待在日期格式。从dual中选择TRIM(截止日期('2004年1月14日','DD-MON-YY'))。我预计输出为2014年1月14日,因为日期格式不在charIt中,这与最初的问题不完全一样(``而不是
-
),但如果有人寻找替代方案,可能需要一个链接来解释编号
106
。谢谢。你得到这个结果纯属运气。如果您在生产代码中使用此选项,那么现在您必须确保每个人的nls\U date\U格式设置都符合您的预期。。。如果这破坏了其他东西会发生什么?更好地理解日期数据类型是如何工作的,以及如何通过to_DATE和to_char将日期从字符串转换为字符串。Oracle对您的查询所做的是将其转换为:
从dual中选择TRIM(to_CHAR(to_DATE('2015年1月29日','DD MON YYYY'),'')
TRIM
是完全没有必要的。最好在语句中显式地进行转换,这样无论是谁运行它,它都能按预期工作。例如,
从dual中选择TO CHAR(TO_DATE('2015年1月29日','DD MON YYYY','nls_DATE_language='american'),'DD MON YYYY','nls_DATE_language='american')在我的代码中,我会在需要时更改会话,并在获取结果后更改为old。更多关于我想要的是日期格式,而不是你建议的字符格式,请再次阅读问题。没有什么是纯粹的运气。我是通过谷歌搜索得到这个解决方案的。每当你显示日期格式的东西时,你实际上是在把它转换回一个字符串(特别是当你把它转换成一个只处理字符串的函数时!)。是的,假设您希望看到以特定格式显示的日期,那么额外的to_char是必要的。在我看来,依靠更改nls_date_format参数简直就是疯狂。这是您在特定的基础上做的事情,而不是作为适当的生产代码的一部分。如果你可以在一个命令中完成它,为什么还要麻烦使用两个单独的命令呢?一旦你得到了正确的格式,你到底想对日期做什么?如果要更新另一个日期列(或将其存储在日期变量或其他内容中),那么担心字符串的格式是无关紧要的,因为它已经是日期了。