将 varchar 强制转换为日期
我在一个小项目中使用 H2 数据库,所有字段都是 varchar
用于查询,我必须将字符串转换为日期,所以我尝试了
SELECT * FROM USER WHERE cast(DATE_CONTRACT AS DATE) > '2005-02-21'
,但出现错误
代码:
错误代码 90009,SQL 状态 90009: 无法解析日期常量 “2011-02-21-15.22.07”,原因: “java.lang.NumberFormatException:对于 输入字符串:“”21-15.22.07“””;
有什么想法吗?
谢谢
i use a H2 database for a small project, all field are varchar
for a query, i must convert a string to date so i tried
SELECT * FROM USER WHERE cast(DATE_CONTRACT AS DATE) > '2005-02-21'
but there are an error
Code :
Error code 90009, SQL state 90009:
Cannot parse date constant
"2011-02-21-15.22.07", cause:
"java.lang.NumberFormatException: For
input string: ""21-15.22.07""";
any idea?
thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您必须使用 parsedatetime() 才能将字符数据“转换”为日期。
http://h2database.com/html/functions.html#parsedatetime
像这样:
永远不要将日期、时间戳或数字存储为字符数据的另一个好理由
You have to use parsedatetime() in order to "cast" your character data to a date.
http://h2database.com/html/functions.html#parsedatetime
Something like this:
Another good reason to never store dates, timestamps or numbers as character data
当然,您可以使用内置函数
PARSEDATETIME
,如下所示:但我想以更标准的格式存储时间戳会更有意义,这样就不需要特殊的解析。示例:
H2 支持 JDBC 支持的格式,以及 ISO 8601。
Of course you could use the built-in function
PARSEDATETIME
as follows:But I guess it would make more sense to store the timestamp in a more standard format, so that no special parsing is required. Example:
H2 supports the format supported by JDBC, plus ISO 8601.
为什么要转换为日期?如果 DATE_CONTRACT 使用一致的 CHAR(19),您可以:
如果我错了,请纠正我,但如果
DATE_CONTRACT
上有索引,这将比转换为日期/日期时间更快。Why convert to date? If DATE_CONTRACT uses a consistent CHAR(19), you can:
Correct me if I'm wrong but if there is an index on
DATE_CONTRACT
, this will be faster than converting to date/datetime.