SQL:to_char Oracle AND SQL-Server 的替代方案

SQL: to_char alternative for Oracle AND SQL-Server

我有一些用于 Oracle 的 sql 语句。这个 sql 语句被我的一个程序使用。 我想在我的程序中支持 Oracle 和 SQL-Server,而无需为 Oracle 和 SQL-Server 使用不同的 sql 语句。

对于特定的 Oracle SQL-语句,我可以使用哪个替代方案:

sql 语句必须适用于 Oracle SQL-Server。

我不认为有通用的功能可以做你想做的事。 Oracle 支持用于提取日期部分的 ANSI 标准 extract() 函数。 SQL 服务器对 YEAR()MONTH()DAY() 具有单独的功能。 Oracle 使用 TO_CHAR(); SQL 服务器使用 CONVERT().

一种选择是在 Oracle 中定义函数 YEAR()MONTH()DAY(),然后使用字符串连接(通过 CONCAT())函数将数据。或者,在每个数据库中为您要执行的操作编写特定的函数。或者,也许有人在 SQL 服务器中实现了 TO_CHAR(),您可以从网上获取代码。

我终于找到了解决办法。也许对其他人也有用。

您可以设置日期的输入格式...

甲骨文:ALTER SESSION SET NLS_DATE_FORMAT = 'DD.MM.YYYY' SQL-服务器:SET DATEFORMAT dmy

即使乍一看来自两个不同供应商的 SQL 实现看起来很相似,但在使用现实生活中的企业应用程序时,您会偶然发现大量差异,而我只是在谈论 SQL,当比较 PL/SQL 和 T-SQL 时,几乎没有任何相似之处。

当试图将两个数据库的使用减少到只有通用功能时,您将失去它们的很多功能,您还可以在文件系统上使用 txt 文件。

正如有人已经建议的那样,一个优雅的解决方案是将数据库中的列保留为 DATE 数据类型,并在数据库之上的应用程序代码中提取数据(如果有的话)。例如,在 Java 中,无论该日期来自 Oracle 还是来自 SQL 服务器,您都将把数据库 DATE 列映射到 java.sql.Date。

不过,如果您想从数据库中获取格式化数据,您可以创建单独的列来保存格式化日期,例如:

字段名 | FIELDNAME_YYYY | FIELDNAME_YYYYMMDD | FIELDNAME_DDMMYYYY