奇怪。。。SQL 别名可以确定行为:"date_agreed" vs "date_agrd"



我正在用rails + mysql编写一个后端程序,试图检索一个"日期";在我的前端输入column

sql = <<-SQL
SELECT ...............,
DATE_FORMAT(sd.date_agreed,'%Y-%m-%d') as date_agreed,
DATE_FORMAT(sd.date_agreed,'%Y-%m-%d') as date_agrd,
..........
FROM shipping_demurrages sd
WHERE ......
SQL

The "date_agreed"one_answers";date_agrd"应该完全一样,但是我的前端收到了不同的数据:

date_agrd: "2022-12-20"
date_agreed: "2022-12-20 00:00:00 -0600"

实际上,除了"date_agreed"会给出一个日期结果,比如& 222-12-20 ",但是如果我给出&;date_agreed"作为名称,结果将是date+time我的问题是:

  1. 为什么不同的别名会导致不同的结果?
  2. date_agreed列已经是一个日期类型,但是如果我不做DATE_FORMAT的事情,我的前端将始终接收一个日期时间,如"2022-12-20 00:00:00 -0600";但不是我期待的约会。为什么呢?

BTW,我的后端是Rails 4.2.6,mysql Ver 15.1 Distrib 5.5.33-MariaDB, for Linux (x86_64) using readline 5.1

我的前端是EXTJS 6.2在chrome浏览器中运行。我使用chrome开发人员工具来监控从后端发送的数据。

date_agreed列已经是一个日期类型,但是如果我不做DATE_FORMAT的东西,我的前端将始终接收一个日期时间,如2012-12-20 00:00:00 -0600;但不是我期待的约会。为什么了吗?

因为你做错了。

如果你正在编写一个服务于前端的API,你不应该依赖于隐式地将日期或时间转换为字符串。相反,您应该EXPLICITY以标准化格式(如ISO8601)输出日期。否则,当你更新应用程序时,它一定会崩溃。

这消除了执行不稳定的数据库查询的全部需要。我猜问题不是这么多的别名,但你可能有一个列与定义的同名,这是导致ActiveRecord将值转换为DateTime,然后被转储--6 h最有可能是由于您的时区设置。

你可以添加一个序列化层,比如ActiveModel::Serializers或jBuilder,或者创建一个装饰器。

最新更新