1

我有一些用于 Oracle 的 sql 语句。我的一个程序使用了这个 sql 语句。我想用我的程序支持 Oracle 和 SQL-Server,而不需要为 Oracle 和 SQL-Server 提供不同的 sql 语句。

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

  • to_char(字段名,'YYYY')
  • to_char(字段名称,'YYYYMMDD')
  • to_char(字段名,'DD.MM.YYYY')

sql 语句必须适用于 OracleSQL-Server。

4

3 回答 3

2

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

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

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

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

字段名 | FIELDNAME_YYYY | FIELDNAME_YYYYMMDD | FIELDNAME_DDMMYYYY

于 2015-11-10T13:12:38.260 回答
1

最后我找到了解决方案。也许它对其他人也有用。

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

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

于 2015-11-10T13:06:14.683 回答
1

我认为没有常见的功能可以做你想做的事。Oracle 支持提取日期部分的 ANSI 标准extract()函数。SQL Server 具有用于YEAR()MONTH()和的单独函数DAY()。甲骨文使用TO_CHAR();SQL Server 使用CONVERT().

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

于 2015-11-10T12:48:35.703 回答