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

MSSQL中如何将VARCHAR类型hiredate列转换为指定日期时间格式

解决VARCHAR日期格式转换问题(yyyy-mm-dd hh:mm:ss → DD-Mon-YYYY HR:MM)

嘿,这个需求挺常见的,我针对几种主流数据库给你整理了直接能用的实现方案~

1. MySQL 实现

因为你的hiredate是VARCHAR类型,得先把它转成数据库能识别的日期时间类型,再按目标格式输出:

SELECT DATE_FORMAT(STR_TO_DATE(hiredate, '%Y-%m-%d %H:%i:%s'), '%d-%b-%Y %H:%i') AS formatted_hiredate
FROM your_table;
  • STR_TO_DATE(hiredate, '%Y-%m-%d %H:%i:%s'):把字符串格式的日期转成MySQL可识别的日期时间类型
  • DATE_FORMAT(..., '%d-%b-%Y %H:%i'):将日期时间按DD-Mon-YYYY HR:MM格式输出(%b会自动生成英文月份缩写,比如Apr)

如果需要永久修改表中数据,可以先新增列再更新:

-- 新增存储格式化后日期的列
ALTER TABLE your_table ADD COLUMN formatted_hiredate VARCHAR(20);
-- 更新数据
UPDATE your_table 
SET formatted_hiredate = DATE_FORMAT(STR_TO_DATE(hiredate, '%Y-%m-%d %H:%i:%s'), '%d-%b-%Y %H:%i');
-- 可选:删除旧列或重命名列
ALTER TABLE your_table DROP COLUMN hiredate;
ALTER TABLE your_table CHANGE COLUMN formatted_hiredate hiredate VARCHAR(20);

2. Oracle 实现

Oracle的日期处理函数更直接,用TO_DATE解析字符串为日期类型,再用TO_CHAR格式化:

SELECT TO_CHAR(TO_DATE(hiredate, 'YYYY-MM-DD HH24:MI:SS'), 'DD-Mon-YYYY HH24:MI') AS formatted_hiredate
FROM your_table;
  • TO_DATE(hiredate, 'YYYY-MM-DD HH24:MI:SS'):把字符串转成Oracle日期类型
  • TO_CHAR(..., 'DD-Mon-YYYY HH24:MI'):按目标格式输出,Mon会生成英文月份缩写(默认首字母大写,取决于数据库的NLS设置)

3. SQL Server 实现

TRY_CONVERT先转成DATETIME类型,再用FORMAT函数生成目标格式:

SELECT FORMAT(TRY_CONVERT(DATETIME, hiredate, 120), 'dd-MMM-yyyy HH:mm') AS formatted_hiredate
FROM your_table;
  • TRY_CONVERT(DATETIME, hiredate, 120):120是SQL Server对应yyyy-mm-dd hh:mm:ss的格式代码,TRY_CONVERT会自动跳过格式错误的记录(返回NULL)
  • FORMAT(..., 'dd-MMM-yyyy HH:mm')MMM生成英文月份缩写,HH是24小时制,mm是分钟

小提醒

  • 如果原数据存在格式不规范的记录(比如不符合yyyy-mm-dd hh:mm:ss格式),建议用带容错的函数(比如MySQL的TRY_STR_TO_DATE、SQL Server的TRY_CONVERT)避免查询报错
  • 如果只是临时查询转换,用SELECT语句即可;如果需要长期存储,建议先把列类型改成DATE/DATETIME,再存储格式化后的值,这样更利于后续的日期计算

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

火山引擎 最新活动