MySql 相当于 MS 访问 DatePart

Posted

技术标签:

【中文标题】MySql 相当于 MS 访问 DatePart【英文标题】:MySql equivalent of MS access DatePart 【发布时间】:2019-10-10 16:39:49 【问题描述】:

我正在尝试将 MS Access 查询转换为 mysql 查询,但在 SELECT 部分中,我发现了一个 DatePart 函数,该函数从表 tbl_trade 中选择年份。我知道我们在 mysql 中有内置函数,如 YEAR()、EXTRACT() 等,但似乎我不能将它们用作

SELECT YEAR(tbl_trade.create_date) from tbl_trade;

报错

Unknown table 'tbl_trade' in field list

另外我不知道如何在mysql中实现DatePart函数的第3个和第4个参数。 您可以从https://www.techonthenet.com/access/functions/date/datepart.php找到更多关于 DatePart 函数的详细信息

最后,我希望能够实现这个

SELECT DatePart("yyyy", tbl_trade.create_date,1,2) FROM tbl_trade

【问题讨论】:

您的第一个查询应该可以工作。 dbfiddle什么版本的MySQL? 【参考方案1】:

最接近的等价物是extract。需要各种intervals。

select create_date, extract(year from create_date)
  from tbl_trade;

+---------------------+--------------------------------+
| create_date         | extract(year from create_date) |
+---------------------+--------------------------------+
| 2019-01-02 00:00:00 |                           2019 |
| 2019-01-02 00:00:00 |                           2019 |
+---------------------+--------------------------------+

至于更改星期和年份的定义,可以通过various modes to week

-- Mode 7: Week starts on Monday. Week 1 is the first with a Monday.

select create_date, week(create_date, 7) from tbl_trade;
+---------------------+----------------------+
| create_date         | week(create_date, 7) |
+---------------------+----------------------+
| 2019-01-02 00:00:00 |                   53 |
| 2019-01-02 00:00:00 |                   53 |
+---------------------+----------------------+

或者通过设置default_week_format 来影响所有日期函数。

set default_week_format = 7;

select create_date, extract(week from create_date) from tbl_trade;
+---------------------+--------------------------------+
| create_date         | extract(week from create_date) |
+---------------------+--------------------------------+
| 2019-01-02 00:00:00 |                             53 |
| 2019-01-02 00:00:00 |                             53 |
+---------------------+--------------------------------+

对于精细控制,有date_format

-- %v is mode 3. First DOW is Monday. First week is has 4 days or more.

select create_date, date_format(create_date, '%W week %v') from tbl_trade;
+---------------------+----------------------------------------+
| create_date         | date_format(create_date, '%W week %v') |
+---------------------+----------------------------------------+
| 2019-01-02 00:00:00 | Wednesday week 01                      |
| 2019-01-02 00:00:00 | Wednesday week 01                      |
+---------------------+----------------------------------------+

【讨论】:

以上是关于MySql 相当于 MS 访问 DatePart的主要内容,如果未能解决你的问题,请参考以下文章

访问 DatePart 函数在表格形式文本框中使用时不会给出正确的周数控制源

MS 通过 odbc 访问 mySql 连接慢

帮我将给 ms 访问查询转换为 MySQL 查询?

如何使用 MYSQL 查询访问 Ms-Access 数据库

SQL SERVER DATEDIFF()函数用法

sql如何提取当前时间的函数