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参数简直就是疯狂。这是您在特定的基础上做的事情,而不是作为适当的生产代码的一部分。如果你可以在一个命令中完成它,为什么还要麻烦使用两个单独的命令呢?一旦你得到了正确的格式,你到底想对日期做什么?如果要更新另一个日期列(或将其存储在日期变量或其他内容中),那么担心字符串的格式是无关紧要的,因为它已经是日期了。