You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Oracle中日期的声明与设置:SQL Server写法如何迁移?

在Oracle中实现SQL Server的日期查询操作

嘿,我来帮你把SQL Server里的日期查询转换成Oracle的写法~ 先整理了几种最常见的场景,对应Oracle的实现方式:

1. 直接声明日期常量

SQL Server常用写法:

-- 直接用字符串(依赖会话日期格式设置)
SELECT * FROM your_table WHERE date_col = '2023-10-01';
-- 显式转换为DATE类型
SELECT * FROM your_table WHERE date_col = CAST('2023-10-01' AS DATE);
SELECT * FROM your_table WHERE date_col = CONVERT(DATE, '2023-10-01');

Oracle对应实现:

Oracle里推荐用**TO_DATE()函数**显式指定格式转换,避免依赖会话的NLS_DATE_FORMAT参数,稳定性更强:

-- 显式格式转换(最推荐)
SELECT * FROM your_table WHERE date_col = TO_DATE('2023-10-01', 'YYYY-MM-DD');
-- Oracle 12c+支持的标准日期字面量写法(类似SQL Server隐式转换,但仍建议显式)
SELECT * FROM your_table WHERE date_col = DATE '2023-10-01';

2. 获取当前日期/时间

SQL Server常用写法:

-- 当前日期(不含时间部分)
SELECT CAST(GETDATE() AS DATE);
-- 当前日期时间
SELECT GETDATE();
SELECT SYSDATETIME(); -- 更高精度的时间

Oracle对应实现:

-- 当前日期(不含时间)
SELECT TRUNC(SYSDATE) FROM DUAL;
-- 当前日期时间
SELECT SYSDATE FROM DUAL;
-- 更高精度的当前时间
SELECT SYSTIMESTAMP FROM DUAL;

3. 日期加减操作

SQL Server常用写法:

-- 加1天
SELECT DATEADD(DAY, 1, GETDATE());
-- 减1个月
SELECT DATEADD(MONTH, -1, GETDATE());

Oracle对应实现:

Oracle支持直接对日期做算术运算,月份加减建议用专门的ADD_MONTHS()函数:

-- 加1天
SELECT SYSDATE + 1 FROM DUAL;
-- 减1个月
SELECT ADD_MONTHS(SYSDATE, -1) FROM DUAL;
-- 加1小时
SELECT SYSDATE + 1/24 FROM DUAL;

4. 提取日期的部分字段

SQL Server常用写法:

-- 提取年份
SELECT YEAR(GETDATE());
-- 提取月份
SELECT MONTH(GETDATE());
-- 提取日
SELECT DAY(GETDATE());

Oracle对应实现:

可以用EXTRACT()函数直接提取,或者TO_CHAR()格式化提取:

-- 提取年份
SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL;
-- 提取月份
SELECT EXTRACT(MONTH FROM SYSDATE) FROM DUAL;
-- 提取日
SELECT EXTRACT(DAY FROM SYSDATE) FROM DUAL;
-- 用TO_CHAR格式化提取(适合需要字符串结果的场景)
SELECT TO_CHAR(SYSDATE, 'YYYY') AS year, TO_CHAR(SYSDATE, 'MM') AS month FROM DUAL;

如果你有特定的SQL Server日期查询语句,随时贴出来,我帮你精准转换~

内容的提问来源于stack exchange,提问作者Ray J

火山引擎 最新活动