【问题标题】:Sybase equivalent of Oracle TO_CHAR(datetime)Oracle TO_CHAR(datetime) 的 Sybase 等效项
【发布时间】:2017-10-31 23:56:58
【问题描述】:

我更改了我的数据库 oracle -> sybase

所以我应该更改我的查询。
但我不知道如何转换我的查询

此外,我必须在这两个查询中(oracle 和 sybase => 我不能使用转换方法)

我的查询是:

select ... 
TO_CHAR(Reg_Date,'yyyy/mm/dd hh24:mi:ss') Reg_Date....
from ...
where ...

请帮忙。

【问题讨论】:

  • “我必须在这两个查询中(oracle n sybase => 我不能使用转换方法)”。 Oracle 和 Sybase 是不同的产品 - 没有通用的方法可以满足您的需求,因此您需要对每个数据库进行单独的查询:Oracle 中的 to_char(...) 和 Sybase 中的 convert(...)。
  • 据我所知,如果我使用 'cast' 而不是 'convert' 查询运行良好,是不是错了?
  • 不幸的是,您不能只将字符串转换为日期,因为需要知道日期格式。 (“03/01/2017”可能表示 2017-03-01 或 2017-01-03,具体取决于您的区域设置。)没有与数据库无关的方式来做您想做的事情。
  • ANSI SQL 日期格式为 'YYYY-MM-DD',但 Oracle 默认为 'DD-MON-YYYY'。因此,为了让您拥有相同的 SQL 语法,您需要在会话开始时或在会话连接触发器上通过 alter session set nls_date_format=YYYY-MM-DD 在 Oracle 中设置会话默认格式。然后你的 SQL 将跨平台作为“从 table_name 中选择 datecol”;
  • 如果您想要一个在所有 DBMS 中工作的 SQL,请不要在 SQL 查询中格式化日期 - 在您的应用程序中进行。

标签: sql oracle sybase database-migration date-formatting


【解决方案1】:

“Sybase”名称下有 4 种不同的数据库产品... Adaptive Server Enterprise (ASE)、SQLAnywhere、IQ、Advantage。您应该提供数据库产品的名称;提供版本也无妨。


假设您正在使用 ASE,您可以使用 convert(to_datatype,value,date_format) 来提供所需的输出,例如:

select getdate(),convert(varchar,getdate(),121)
go
 -------------------  -------------------
 Jun 11 2017  8:02PM  2017/06/11 20:02:38

我不知道有一个查询可以同时在 Sybase (ASE) 和 Oracle 中使用。

【讨论】:

    猜你喜欢
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    • 2016-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多