Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.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
要将oracle函数转换为cast语句,使其成为ANSI标准吗_Oracle_Oracle11g - Fatal编程技术网

要将oracle函数转换为cast语句,使其成为ANSI标准吗

要将oracle函数转换为cast语句,使其成为ANSI标准吗,oracle,oracle11g,Oracle,Oracle11g,下面是我想用CAST函数替换为_CHAR的oracle查询 SELECT tag.action_log_id, TO_CHAR (tag.action_date, 'MM/DD/YYYY HH:MI:SS AM') action_date, tag.tree_node AS chain, tag.environment AS environment, tag.table_name AS tablename, ta

下面是我想用CAST函数替换为_CHAR的oracle查询

 SELECT   tag.action_log_id,
             TO_CHAR (tag.action_date, 'MM/DD/YYYY HH:MI:SS AM') action_date,
             tag.tree_node AS chain, tag.environment AS environment,
             tag.table_name AS tablename, tag.action, tag.action_log_sql,
             tag.action_log_xml, tag.user_id
        FROM ods.ods_fooditems_log tag
       WHERE tag.action_date >= TO_DATE ('8/27/2013', 'MM/DD/YYYY')
         AND TRUNC (tag.action_date) <= TO_DATE ('8/27/2014', 'MM/DD/YYYY')
         AND tag.businessid = 167
    ORDER BY tag.action_log_id DESC
选择tag.action\u log\u id,
TO_CHAR(tag.action_date,'MM/DD/YYYY HH:MI:SS AM')action_date,
tag.tree_节点作为链,tag.environment作为环境,
tag.table\u name为tablename、tag.action、tag.action\u log\u sql,
tag.action\u log\u xml,tag.user\u id
从ods.ods\u fooditems\u日志标记
其中tag.action\u date>=截止日期('2013年8月27日','MM/DD/YYYY')

和TRUNC(tag.action\u date)如果要使用
cast
函数而不是
to\u char
函数,则不能指定日期格式:

SQL> select cast(sysdate as Varchar2(15)) strdate from dual;

STRDATE
---------------
27.08.14
您必须在会话、系统或数据库级别指定此格式:

SQL> alter session set nls_date_format="MM/DD/YYYY HH:MI:SS AM";

Session altered.

SQL> select cast(sysdate as Varchar2(25)) from dual;

CAST(SYSDATEASVARCHAR2(25
-------------------------
08/27/2014 04:22:59 PM
您还可以按块收集此日期:

select extract(MONTH from sysdate) || '/' || 
       extract(DAY from sysdate) || '/' || 
       extract(YEAR from sysdate) || ' ' || ' ' ||
       lpad(mod(extract(HOUR from cast(sysdate as timestamp)), 12), 2, '0') || ':' || 
       lpad(extract(MINUTE from cast(sysdate as timestamp)), 2, '0') || ':' || 
       lpad(extract(SECOND from cast(sysdate as timestamp)), 2, '0') || ' ' || 
       case 
         when extract(HOUR from cast(sysdate as timestamp)) / 12 > 1 then 'PM'
         ELSE 'AM'
       end d
     , sysdate current_date
  from dual

        D               CURRENT_DATE
------------------------------------
8/27/2014 02:00:06 PM   08/27/2014

如果这是Oracle,请删除“mysql”标记。那么,你为什么要这样做
TO_CHAR()
是一个非常合理的函数。将其转换为什么?请具体说明。要在查询中使用CAST()函数代替to_CHAR(),我希望我的查询与ANSI SQL标准兼容。因此,有没有其他方法可以不用强制转换,我可以使用哪个函数替换为_CHAR(),并提供所需的格式。非常感谢Zaratutra的回复。在这次更改中,我仍然收到试图转换为ANSI-92的消息。我不明白您的意思,您可以发现
提取
函数是ANSI-92的一部分。如果您对
lpad
函数有问题,可以使用
case
操作符,就像我用它来确定它是PM还是AM一样。