gpt4 book ai didi

mysql - Oracle-sql和Mysql常用日期​​格式函数

转载 作者:行者123 更新时间:2023-11-29 01:56:17 24 4
gpt4 key购买 nike

我需要为 MySQL 和 Oracle 数据库编写通用查询。当我必须输入日期条件时会出现问题。例如:有一个字段Txn_date,在MySQL中是'20150116',在Oracle中是'16-JAN-2015'

我使用 date_format(now(),'%Y%m%d') 用于 MySQL 和 to_char(sysdate,'dd-MON-YYYY')甲骨文。

在 Oracle 和 MySQL 中是否可以使用相同的函数?

我尝试了 Txn_date in ( date_format(now(),'%Y%m%d') OR to_char(sysdate,'dd-MON-YYYY') ) 但没有成功,因为 to_char() 无法在 MySQL 中识别。

最佳答案

首先,在 MySQL 中,日期在隐式转换时通常具有以下格式 - 2015-01-16 - 而不是 20150116 .我认为您可以在 MySQL Oracle(它是标准 SQL)中执行以下操作 - 我已经在 Oracle (10g) 中检查过它并且它有效,并且它似乎有效 in my fiddling with MySQL :

SELECT * FROM mytable
WHERE mydate IN ( DATE '2015-01-16', DATE '2015-01-18' );

要转换为 DATE 的字符串文字必须采用 yyyy-mm-dd 的形式.现在,如果您的日期是日期 并且没有时间部分,这将起作用。现在,如果您的日期确实有时间部分,那么事情会变得更加困难,因为 MySQL 使用 DATE()函数来获取日期部分,而 Oracle 将使用 TRUNC() .但是您可以通过明智地使用 >= 来解决这个问题和 < ,例如:

SELECT * FROM mytable
WHERE ( mydate >= DATE '2015-01-16' AND mydate < DATE '2015-01-17' )
OR ( mydate >= DATE '2015-01-18' AND mydate < DATE '2015-01-19' );

现在如果你想使用 SYSDATE , 最好的办法是使用 ANSI 标准 CURRENT_DATECURRENT_TIMESTAMP .这些可以直接比较而不需要格式化,并且应该在 MySQL 和 Oracle 中工作。您还可以使用 INTERVAL 进行日期运算。 ,在这种情况下,您可以尝试以下操作:

SELECT * FROM mytable
WHERE mydate > CURRENT_DATE - INTERVAL '1' DAY;

更新 我一直在思考这个问题。如果您想获取今天输入的所有行,上面的查询实际上不起作用。困难在于 Oracle 将 ANSI 日期文字识别为日期(即没有时间部分),但据我所知,没有一种 ANSI 标准的方法来转换日期/时间 值(Oracle DATE 是)到一个日期。也就是说,Oracle 和 MySQL 都支持 EXTRACT() 函数,因此您应该能够执行以下操作来获取今天的记录:

SELECT * FROM mytable
WHERE EXTRACT(YEAR FROM mydate) = EXTRACT(YEAR FROM CURRENT_DATE)
AND EXTRACT(MONTH FROM mydate) = EXTRACT(MONTH FROM CURRENT_DATE)
AND EXTRACT(DAY FROM mydate) = EXTRACT(DAY FROM CURRENT_DATE);

绝对笨拙,尤其是当一个人有多个日期要考虑时(我假设你这样做,因为你正在使用 IN 运算符),但应该在两个平台上工作。 See SQL Fiddle Demo here (MySQL)here (Oracle) .

关于mysql - Oracle-sql和Mysql常用日期​​格式函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27992138/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com