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

SQL中从短日期格式提取数字日期值的实现方法

将短日期格式(如16-Mar-20)转换为数字日期的SQL方案

我明白你现在需要把这类带月份英文缩写的短日期,转换成纯数字格式的日期值(比如把16-Mar-20转成20200316这类数字),甚至可以通过拆分日、月、年分别计算的方式实现。下面根据不同SQL数据库,给你几种实用的方案:

一、直接转换为数字日期(推荐)

这种方法先把字符串格式的日期转换为数据库原生的日期类型,再格式化为YYYYMMDD的字符串,最后转为数字类型。

MySQL 示例

SELECT 
  CAST(DATE_FORMAT(STR_TO_DATE(`Start Date`, '%d-%b-%y'), '%Y%m%d') AS UNSIGNED) AS Date_Numeric
FROM your_table;
  • 步骤解析:
    1. STR_TO_DATE(Start Date, '%d-%b-%y'):将16-Mar-20这类字符串转换为MySQL的DATE类型
    2. DATE_FORMAT(..., '%Y%m%d'):把日期格式化为20200316这样的字符串
    3. CAST(AS UNSIGNED):将字符串转换为无符号整数,得到最终的数字日期

SQL Server 示例

SELECT 
  CAST(CONVERT(VARCHAR, CONVERT(DATE, [Start Date], 6), 112) AS INT) AS Date_Numeric
FROM your_table;
  • 步骤解析:
    1. CONVERT(DATE, [Start Date], 6):格式代码6对应dd-Mon-yy,将字符串转为日期类型
    2. CONVERT(VARCHAR, ..., 112):格式代码112对应YYYYMMDD,得到数字格式的字符串
    3. CAST(AS INT):转为整数类型的数字日期

二、拆分日、月、年分别计算(符合你的思路)

如果你希望通过拆分日期各部分再计算的方式实现,也可以这样做:

MySQL 示例

SELECT 
  EXTRACT(YEAR FROM STR_TO_DATE(`Start Date`, '%d-%b-%y')) * 10000 +
  EXTRACT(MONTH FROM STR_TO_DATE(`Start Date`, '%d-%b-%y')) * 100 +
  EXTRACT(DAY FROM STR_TO_DATE(`Start Date`, '%d-%b-%y')) AS Date_Numeric
FROM your_table;
  • 逻辑:年乘以10000(让年份占据前四位),月乘以100(占据中间两位),加上日期(最后两位),最终得到2020*10000 + 3*100 +16 = 20200316

SQL Server 示例

SELECT 
  DATEPART(YEAR, CONVERT(DATE, [Start Date], 6)) * 10000 +
  DATEPART(MONTH, CONVERT(DATE, [Start Date], 6)) * 100 +
  DATEPART(DAY, CONVERT(DATE, [Start Date], 6)) AS Date_Numeric
FROM your_table;

关于你之前尝试的语句说明

你之前用的FROM_UNIXTIME(Start Date, 'dd-MMM-yy')反方向的操作:它是把Unix时间戳(数字)转换为日期字符串,而不是把日期字符串转成数字。这就是为什么它没达到你想要的数字日期效果,需要先把字符串转成日期/时间戳,再进行后续转换。

内容的提问来源于stack exchange,提问作者Shivam Sahil

火山引擎 最新活动