JPQL SQL Server CURRENT_DATE 语法不正确

Posted

技术标签:

【中文标题】JPQL SQL Server CURRENT_DATE 语法不正确【英文标题】:JPQL SQL Server CURRENT_DATE Incorrect Syntax 【发布时间】:2018-05-13 04:08:19 【问题描述】:

使用 Spring 4.3.0 和 com.microsoft.sqlserver:mssql-jdbc:6.2.1.jre8,我正在尝试执行此 SQL Server 查询

SELECT * FROM Message m WHERE m.time >= '2017-11-29' AND m.user_id = 2 ORDER BY m.time DESC

我正在使用 JPQL 表达式格式化 2017-11-29 03:56:34.375 的日期时间列从 SQL Server Express 表中进行选择

SELECT m FROM Message m WHERE m.time >=日期表达式AND m.user.id = :userId ORDER BY m.time DESC

消息对象使用列类型java.util.Date,并插入到表中。

我找到了许多关于该主题的指南/SO 问题,但似乎没有一个对我有用。在 dateexpression 我尝试过:

CURRENT_DATE,关键字“CURRENT_DATE”附近的语法不正确。 CURRENT_DATE(),没有错误但没有选择任何消息。 :today,将today 作为传入参数java.sql.Date today = new java.sql.Date(new java.util.Date().getTime()); (=> 2017-11-29) 没有错误但不会选择任何消息。 ':today',给unknown parameter name : today d ':today' 出现语法错误。 d :today 出现语法错误。 GETDATE(),没有错误但没有选择任何消息。

【问题讨论】:

【参考方案1】:

convert(date, getdate()) 这很有效,就像往常一样有条不紊地详细说明 SO 的问题时发现。

【讨论】:

除了基于字符的数据类型,存储在数据库中的值没有任何特定的“格式”——这是您用来查看信息的应用程序的产物。了解这一点,您将成为更好的开发人员。您还应该养成先阅读文档的习惯。 tsql 中没有 current_date 函数/全局变量;它确实有 CURRENT_TIMESTAMP。

以上是关于JPQL SQL Server CURRENT_DATE 语法不正确的主要内容,如果未能解决你的问题,请参考以下文章

条件查询,SQL,JPQL,HQL

如何使用JPQL写纯SQL语句

使用子句 IN 从 sql 转换为 jpql

JPQL语法总结对比原生sql

防止JPQL查询sql注入

SQL到JPQL - 哈希因公式