我正在尝试将日期中的分钟和秒设置为 00,我使用 formatdatetime(date, 'Y-MM-dd HH:00:00') 并且它适用于正常日期,但尝试使用 formatdatetime('2017 -01-01 12:27:27', 'Y-MM-dd HH:00:00') 结果是 2016-01-01 12:00:00 而不是 2017-01-01 12:00:00。为什么?
这是一些示例代码:
CREATE TABLE test_table (
timestamp DATETIME(3) NOT NULL
);
INSERT INTO test_table
VALUES
('2017-01-01 12:27:27'),
('2017-01-02 12:27:27'),
('2017-01-03 12:27:27');
SELECT FORMATDATETIME(timestamp, 'Y-MM-dd HH:00:00')
FROM test_table;
结果是:
FORMATDATETIME(TIMESTAMP, 'Y-MM-dd HH:00:00')
2016-01-01 12:00:00
2017-01-02 12:00:00
2017-01-03 12:00:00
为什么会有这种行为?
我尝试使用 H2 1.4.192/JDK 1.7.0_80 和 H2 1.4.195/JRE 1.8.0_74。
输出SELECT timestamp FROM test_table
正常:
TIMESTAMP ▼
2017-01-01 12:27:27.0
2017-01-02 12:27:27.0
2017-01-03 12:27:27.0
编辑:我发现了问题,它似乎是语言环境:
输出SELECT FORMATDATETIME(timestamp, 'Y-MM-dd HH:00:00 z', 'it', 'GMT') FROM test_table
:
FORMATDATETIME(TIMESTAMP, 'Y-MM-dd HH:00:00 z', 'it')
2016-01-01 12:00:00 CET
2017-01-02 12:00:00 CET
2017-01-03 12:00:00 CET
输出SELECT FORMATDATETIME(timestamp, 'Y-MM-dd HH:00:00 z', 'en', 'GMT') FROM test_table
:
FORMATDATETIME(TIMESTAMP, 'Y-MM-dd HH:00:00 z', 'en')
2017-01-01 12:00:00 CET
2017-01-02 12:00:00 CET
2017-01-03 12:00:00 CET
使用it
语言环境,它会在 2017 年 1 月 1 日减去一年,而使用en
语言环境则不会。有人可以解释一下为什么会这样吗?语言环境不应该只改变数据表示吗?