您好!欢迎访问家园网-www.jy.wang!

家园网

sql的代码select year(3) as MY-year; 会显示1900还是1903

网络 作者:本站 点击:

SELECT YEAR(3) AS MY-year 运行结果分析


一、直接答案

在 SQL Server 中运行,结果是:1900

text

MY-year
-------
1900

不是 1903!


二、为什么是 1900,不是 1903?

SQL Server 的日期系统

SQL Server 使用 1900-01-01 作为日期的基准点(起点)

数字代表的日期
01900-01-01
11900-01-02
21900-01-03
31900-01-04
n1900-01-01 + n天

计算过程

sql

SELECT YEAR(3)

执行步骤

  1. 3 被解释为 1900-01-01 + 3天

  2. 计算:1900-01-01 + 3天 = 1900-01-04

  3. 提取年份:1900


三、验证代码

sql

-- 验证数字与日期的对应关系SELECT 
    0 AS 数字, 
    CAST(0 AS datetime) AS 对应日期, 
    YEAR(0) AS 年份UNION ALLSELECT 
    1, 
    CAST(1 AS datetime), 
    YEAR(1)UNION ALLSELECT 
    2, 
    CAST(2 AS datetime), 
    YEAR(2)UNION ALLSELECT 
    3, 
    CAST(3 AS datetime), 
    YEAR(3);

结果

数字对应日期年份
01900-01-011900
11900-01-021900
21900-01-031900
31900-01-041900

四、如果要得到 1903 怎么写?

YEAR() 只能从日期中提取年份,不能直接做算术运算。

sql

-- 错误理解:YEAR(3) 不会变成 1903-- YEAR() 只提取年份,不做加法-- 要得到 1903,应该直接写SELECT 1903 AS MY-year;-- 或者用加法SELECT 1900 + 3 AS MY-year;


五、其他数据库的表现

数据库SELECT YEAR(3) 结果说明
SQL Server1900将数字转换为基准日期 1900-01-01 + 3天
MySQLNULL 或报错MySQL 要求参数必须是合法日期,数字会报错
Oracle报错Oracle 要求日期类型
PostgreSQL报错同样要求日期类型

sql

-- MySQL 中会返回 NULL(不是 1900)SELECT YEAR(3);  -- 结果:NULL


六、YEAR() 的正确用法

sql

-- ✅ 正确:从日期中提取年份SELECT YEAR('2024-04-15');   -- 2024SELECT YEAR(GETDATE());       -- 当前年份-- ✅ 正确:从日期时间中提取SELECT YEAR('2024-04-15 14:30:00');  -- 2024-- ❌ 错误:传入数字SELECT YEAR(2024);  -- SQL Server: 1905(1900+2024天),不是 2024-- ✅ 想要数字 2024,直接写SELECT 2024;


七、AS MY-year 别名注意

sql

SELECT YEAR(3) AS MY-year;

部分说明
MY-year别名中包含减号 -
问题减号可能被误认为减法运算符
建议用方括号或双引号包裹

sql

-- 推荐写法SELECT YEAR(3) AS [MY-year];SELECT YEAR(3) AS "MY-year";


八、总结

问题答案
SELECT YEAR(3) 结果是多少?1900
为什么是 1900?SQL Server 将数字 3 解释为 1900-01-01 加上 3 天 → 1900-01-04,年份是 1900
是 1903 吗?❌ 不是
YEAR() 的正确用途从日期中提取年份,不是做算术运算
如何得到 1903?SELECT 1900 + 3 或直接 SELECT 1903

一句话总结SELECT YEAR(3) 在 SQL Server 中结果是 1900,因为 SQL Server 将数字 n 解释为 1900-01-01 加上 n 天,YEAR() 提取的是这个日期的年份,而不是把数字本身当作年份。YEAR() 是用来提取日期的年份,不是用来做加法运算的


标签: