pgsql 日期
时间: 2025-07-01 13:05:13 浏览: 14
### 日期类型与操作
PostgreSQL 提供了多种日期和时间相关的数据类型,包括 `DATE`、`TIME`、`TIMESTAMP`、`TIMESTAMPTZ`(带时区的时间戳)以及 `INTERVAL`。这些类型可以用于存储和操作各种日期时间信息,并且 PostgreSQL 还提供了丰富的内置函数来处理这些类型。
#### 创建和插入日期类型
在创建表时,可以使用 `DATE` 或 `TIMESTAMP` 类型来定义列。例如:
```sql
CREATE TABLE events (
id SERIAL PRIMARY KEY,
event_name TEXT,
event_date DATE,
event_timestamp TIMESTAMP
);
```
插入数据时,可以直接使用日期字面量或使用当前时间函数:
```sql
INSERT INTO events (event_name, event_date, event_timestamp)
VALUES ('Conference', '2025-04-05', NOW());
```
#### 常用日期函数
##### 获取当前日期和时间
- `CURRENT_DATE`:获取当前日期。
- `NOW()` 或 `CURRENT_TIMESTAMP`:获取当前的时间戳(包括时区信息)。
```sql
SELECT CURRENT_DATE;
SELECT NOW();
```
##### 提取日期部分
使用 `EXTRACT` 函数可以从日期或时间戳中提取特定的部分,如年、月、日等:
```sql
SELECT EXTRACT(YEAR FROM NOW()) AS current_year;
SELECT EXTRACT(MONTH FROM NOW()) AS current_month;
SELECT EXTRACT(DAY FROM NOW()) AS current_day;
```
##### 日期加减运算
可以使用 `+` 和 `-` 运算符对日期进行加减操作。例如,计算某一天之后的几天:
```sql
SELECT CURRENT_DATE + INTERVAL '5 days' AS five_days_later;
SELECT CURRENT_DATE - INTERVAL '1 month' AS one_month_ago;
```
也可以直接对两个日期进行减法运算以得到间隔天数:
```sql
SELECT (DATE '2025-04-10' - DATE '2025-04-05') AS days_difference;
```
##### 格式化日期输出
使用 `TO_CHAR` 函数可以将日期转换为指定格式的字符串:
```sql
SELECT TO_CHAR(NOW(), 'YYYY-MM-DD HH24:MI:SS') AS formatted_date;
```
##### 转换字符串为日期
使用 `TO_DATE` 函数可以将字符串转换为日期:
```sql
SELECT TO_DATE('05 Dec 2000', 'DD Mon YYYY') AS converted_date;
```
#### 数据类型转换
除了日期相关的操作外,PostgreSQL 还支持多种方式来进行数据类型的转换:
- **使用 `CAST` 函数**:
```sql
SELECT CAST('123' AS INTEGER);
SELECT CAST('2025-04-05' AS DATE);
```
- **使用 `::` 操作符**:
```sql
SELECT '123'::INTEGER;
SELECT '2025-04-05'::DATE;
```
- **通过格式化函数**:
```sql
SELECT TO_NUMBER('12,454.8-', '99G999D9S');
SELECT TO_TIMESTAMP('05 Dec 2000', 'DD Mon YYYY');
```
#### 示例代码
以下是一个完整的示例,展示如何结合上述功能进行日期操作:
```sql
-- 插入记录
INSERT INTO events (event_name, event_date, event_timestamp)
VALUES ('Meeting', '2025-04-06', NOW());
-- 查询并格式化输出
SELECT event_name,
TO_CHAR(event_date, 'Day, Month DD, YYYY') AS formatted_date,
EXTRACT(DOW FROM event_date) AS day_of_week
FROM events;
-- 计算未来一周内的事件
SELECT event_name, event_date
FROM events
WHERE event_date BETWEEN CURRENT_DATE AND CURRENT_DATE + INTERVAL '7 days';
```
阅读全文
相关推荐


















