我有一些用于 Oracle 的 sql 语句。我的一个程序使用了这个 sql 语句。我想用我的程序支持 Oracle 和 SQL-Server,而不需要为 Oracle 和 SQL-Server 提供不同的 sql 语句。
对于特定的 Oracle SQL 语句,我可以使用哪种替代方法:
- to_char(字段名,'YYYY')
- to_char(字段名称,'YYYYMMDD')
- to_char(字段名,'DD.MM.YYYY')
sql 语句必须适用于 Oracle和SQL-Server。
我有一些用于 Oracle 的 sql 语句。我的一个程序使用了这个 sql 语句。我想用我的程序支持 Oracle 和 SQL-Server,而不需要为 Oracle 和 SQL-Server 提供不同的 sql 语句。
对于特定的 Oracle SQL 语句,我可以使用哪种替代方法:
sql 语句必须适用于 Oracle和SQL-Server。
即使乍一看来自两个不同供应商的 SQL 实现看起来很相似,但在处理现实生活中的企业应用程序时,您会偶然发现大量差异,而我只是在谈论 SQL,将 PL/SQL 与 T-SQL 进行比较几乎没有任何相似之处。
当试图将两个数据库的使用减少到仅通用功能时,您将失去很多功能,您也可以在文件系统上使用 txt 文件。
正如有人已经建议的那样,一种优雅的解决方案是将数据库中的列保留为 DATE 数据类型,并在数据库上方的应用程序代码中提取数据(如果有)。例如,在 Java 中,您将数据库的 DATE 列映射到 java.sql.Date,无论该日期是来自 Oracle 还是来自 SQL Server。
不过,如果您想从数据库中获取格式化数据,您可以创建单独的列来保存格式化日期,例如:
字段名 | FIELDNAME_YYYY | FIELDNAME_YYYYMMDD | FIELDNAME_DDMMYYYY
最后我找到了解决方案。也许它对其他人也有用。
您可以设置日期的输入格式...
甲骨文:ALTER SESSION SET NLS_DATE_FORMAT = 'DD.MM.YYYY'
SQL 服务器:SET DATEFORMAT dmy
我认为没有常见的功能可以做你想做的事。Oracle 支持提取日期部分的 ANSI 标准extract()
函数。SQL Server 具有用于YEAR()
、MONTH()
和的单独函数DAY()
。甲骨文使用TO_CHAR()
;SQL Server 使用CONVERT()
.
一种选择是在 Oracle 中定义函数YEAR()
、MONTH()
和DAY()
,然后使用字符串连接(通过CONCAT()
)函数来组合数据。或者,在每个数据库中为您想要执行的操作编写特定函数。或者,也许有人已经TO_CHAR()
在 SQL Server 中实现了,您可以从网上获取代码。