【问题标题】:Change the format of date column更改日期列的格式
【发布时间】:2019-03-30 16:15:51
【问题描述】:

我有一个名为purchaseDate 的列,类型为DATE。我想编写一个以YYYY-MM-DD 格式返回purchaseDate 的查询。

我在使用 between 函数时遇到了麻烦。这是我的代码

select *
from purchaseOrders
where purchaseDate between '20-09-18' and '20-10-18'

这是我期望得到的结果:

purchaseDate
------------
2018-09-20
2018-09-21
2018-09-22
2018-10-19
2018-10-20

我该怎么做?

【问题讨论】:

  • Sqlite 没有 DATE 类型。参考sqlite.org/datatype3.html
  • 无论您存储在 purchaseDate 列中的值是多少,它都是。如果您希望它是YYYY-MM-DD,这就是您需要存储在其中并在按列进行比较/排序时使用的内容。 (或其他可识别的日期/时间格式并根据需要进行转换)
  • @Shawn,感谢您指出这一点。这意味着正在使用的数据库是 SQL Server。我实际上没有数据库,我只是在回答一个问题。

标签: sql sql-server sqlite date-format


【解决方案1】:

尝试在您的查询中使用stftime()

select *
from purchaseOrders
where purchaseDate between strftime(%s, '20-09-18') and strftime(%s, '20-10-18')

SQLite中strftime函数的语法是:

strftime(format, timestring [, modifier1, modifier2, ... modifier_n ])

这里还讨论了其他一些替代方案:

SQL Select between dates

【讨论】:

  • 感谢您的回复。那么第一个参数将 20-09-18 转换为 2018-09-20?我问是因为in this link,它说第二个参数必须是某种格式,是当前格式还是你打算转换成的格式?
  • 你写的查询也能用于SQL Server吗?
【解决方案2】:

你可以这样做:

select CONVERT(varchar(10), purchaseDate, 120) AS 'Purchase Date'
from purchaseOrders
where purchaseDate
between '20-09-18' and '20-10-18';

更多:How to get a date in YYYY-MM-DD format from a TSQL datetime field?

编辑 2:

SQLite 在这篇文章中要求日期为 YYYY-mm-dd 格式或其他可识别的格式: SQL Select between dates

你可以这样做:

select *
from purchaseOrders
where purchaseDate
between '2018-09-18' and '2018-10-18'

【讨论】:

  • 感谢这个 Gauravsa。我看一下链接。
  • 再次感谢 Gauravsa。您回答的第一部分实际上还可以,因为数据库实际上是在 SQL Server 上运行的。
  • 是的,转换使用值 106(即 dd mon yy),是否可以将其设为 120(yyyy-mm-dd hh:mi:ss),带有“ hh :mi:ss" 删除了吗?如果是这样,你是怎么做到的?
  • 好的,我明白了。非常感谢 Gauravsa 的帮助。最后一件事,我不需要 REPLACE 子句吗?
  • 如果你只需要'2012-06-18'然后120给你,不需要替换。
猜你喜欢
  • 2022-11-03
  • 1970-01-01
  • 2018-05-22
  • 1970-01-01
  • 2011-06-05
  • 2016-11-22
相关资源
最近更新 更多