JPA sql 中将 字符串(“2026-07-17 00:18:59”)转成Date
在 SQL 中,将"2026-07-17 00:18:59"这种格式的字符串转换为DATE(只保留年月日,丢弃时分秒)或DATETIME(保留完整时间),有以下几种方法:
一、MySQL 中的转换
1. 转为DATE(只保留年月日)
sql
SELECT DATE('2026-07-17 00:18:59') AS result; -- 结果: 2026-07-17 SELECT CAST('2026-07-17 00:18:59' AS DATE) AS result; -- 结果: 2026-07-17 SELECT STR_TO_DATE('2026-07-17 00:18:59', '%Y-%m-%d %H:%i:%s') AS result; -- 结果: 2026-07-172. 转为DATETIME(保留完整时间)
sql
SELECT STR_TO_DATE('2026-07-17 00:18:59', '%Y-%m-%d %H:%i:%s') AS result; -- 结果: 2026-07-17 00:18:593. 转为TIMESTAMP
sql
SELECT TIMESTAMP('2026-07-17 00:18:59') AS result; -- 结果: 2026-07-17 00:18:59二、SQL Server 中的转换
sql
SELECT CONVERT(DATE, '2026-07-17 00:18:59', 120) AS result; -- 结果: 2026-07-17 SELECT CONVERT(DATETIME, '2026-07-17 00:18:59', 120) AS result; -- 结果: 2026-07-17 00:18:59 SELECT CAST('2026-07-17 00:18:59' AS DATETIME) AS result;格式码
120对应yyyy-mm-dd hh:mi:ss(24h),适用于你的字符串格式。
三、Oracle 中的转换
sql
SELECT TO_DATE('2026-07-17 00:18:59', 'YYYY-MM-DD HH24:MI:SS') AS result FROM dual; -- 结果: 2026-07-17 00:18:59Oracle 的
DATE类型本身就包含时间部分。
四、PostgreSQL 中的转换
sql
SELECT '2026-07-17 00:18:59'::DATE AS result; -- 结果: 2026-07-17 SELECT '2026-07-17 00:18:59'::TIMESTAMP AS result; -- 结果: 2026-07-17 00:18:59
五、在你的场景中(MySQL + JPA 接口投影)
如果你需要在 SQL 中将字符串转为DATE,然后在 JPA 接口投影中返回Date类型:
SQL 写法
sql
SELECT vin, DATE(time) AS time, -- 转为 DATE(丢弃时分秒) field FROM your_table
或保留完整时间:
sql
SELECT vin, STR_TO_DATE(time, '%Y-%m-%d %H:%i:%s') AS time, field FROM your_table
VO 接口定义
java
public interface DrivingRecordVO { String getVin(); Date getTime(); // 对应 SQL 中的 time 列 String getField(); }六、常用格式符对照表(MySQL STR_TO_DATE)
| 格式符 | 含义 | 示例 |
|---|---|---|
%Y | 四位年份 | 2026 |
%m | 两位月份 | 07 |
%d | 两位日期 | 17 |
%H | 24小时制小时 | 00 |
%i | 分钟 | 18 |
%s | 秒 | 59 |
你的字符串格式2026-07-17 00:18:59,对应格式:
sql
STR_TO_DATE('2026-07-17 00:18:59', '%Y-%m-%d %H:%i:%s')七、总结
| 数据库 | 转 DATE | 转 DATETIME/TIMESTAMP |
|---|---|---|
| MySQL | DATE(str)或CAST(str AS DATE) | STR_TO_DATE(str, '%Y-%m-%d %H:%i:%s') |
| SQL Server | CONVERT(DATE, str, 120) | CONVERT(DATETIME, str, 120) |
| Oracle | TO_DATE(str, 'YYYY-MM-DD HH24:MI:SS') | 同上(DATE 已包含时间) |
| PostgreSQL | str::DATE | str::TIMESTAMP |
如果你的数据库是MySQL,直接使用:
sql
SELECT STR_TO_DATE('2026-07-17 00:18:59', '%Y-%m-%d %H:%i:%s') AS result;这个写法既支持转为DATE(会自动截断时间),也支持转为DATETIME(保留完整时间)。在你的 JPA 接口投影中,直接映射为Date类型即可。