You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

服务端如何将SQL DATE转换为YYYY-MM-DD格式?

解决服务端将DATE类型字段转为YYYY-MM-DD格式的方法

原因说明

数据库里的DATE类型本身只存储年月日,但Node.js的数据库驱动通常会把它转换成JavaScript的Date对象,而这个对象会带上时区对应的时间部分,所以你拿到的是类似YYYY-MM-DDT22:00:00.000Z的格式。下面是几种服务端层面的解决方式:


1. 数据库查询时直接格式化(推荐)

在SQL查询语句里就把日期转成字符串格式,这样拿到的结果直接就是YYYY-MM-DD,不用后续处理。根据你用的数据库,写法不同:

MySQL/MariaDB

SELECT DATE_FORMAT(start_date, '%Y-%m-%d') AS start_date FROM your_table;

PostgreSQL

SELECT TO_CHAR(start_date, 'YYYY-MM-DD') AS start_date FROM your_table;

SQL Server

如果之前用FORMAT没生效,试试用CONVERT更稳妥:

SELECT CONVERT(VARCHAR(10), start_date, 23) AS start_date FROM your_table;

(注:FORMAT(start_date, 'yyyy-MM-dd')理论上也能生效,但CONVERT性能更好,适合大数据量查询)


2. Node.js查询结果后处理

如果不想改SQL语句,可以在拿到查询结果后,手动把Date对象转成目标格式:

方法一:直接截取ISO字符串的前10位

// 假设查询返回的是rows数组
const formattedRows = rows.map(row => {
  return {
    ...row,
    // 把Date对象转成ISO字符串后,分割出日期部分
    start_date: row.start_date.toISOString().split('T')[0]
  };
});

方法二:用原生Intl.DateTimeFormat格式化(更严谨)

const formattedRows = rows.map(row => {
  return {
    ...row,
    start_date: new Intl.DateTimeFormat('en-CA', {
      year: 'numeric',
      month: '2-digit',
      day: '2-digit'
    }).format(row.start_date)
  };
});

en-CA区域的日期格式刚好是YYYY-MM-DD,也可以自定义格式选项来适配需求。


3. 配置数据库驱动直接返回字符串

有些数据库驱动支持配置,让DATE类型字段直接返回字符串而非Date对象:

以mysql2驱动为例

在创建连接时添加dateStrings配置:

const mysql = require('mysql2/promise');

const connection = await mysql.createConnection({
  host: '你的数据库地址',
  user: '用户名',
  password: '密码',
  database: '数据库名',
  // 指定DATE类型字段返回字符串
  dateStrings: ['DATE']
});

这样查询到的start_date直接就是YYYY-MM-DD格式的字符串,无需额外处理。


内容的提问来源于stack exchange,提问作者sassy.M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 17:05:22