我有一个date类型的列,其中只有年份和月份是狂欢的。我想在SQL查询中使用缩短的日期格式,例如:
SELECT * FROM my_table where date_column='2019-10';当然,现在它会导致错误:
SQL Error [22007]: ERROR: invalid input syntax for type date: "2019-12"有机会让它成为可能吗?谢谢!
编辑:
我想要实现的是让它自动实现。我知道我可以把我的字符串与to_date('2019-10','YYYY-MM')约会。我的问题是如何使我的查询看起来像:SELECT * FROM my_table where date_column='2019-10'。没有任何铸造和转换。
我正在阅读关于CREATE CAST的声明,但我不确定这是我在这里寻找的。
发布于 2019-10-08 13:34:35
我建议:
where date_column >= ('2019-10' || '-01')::date and
date_column < ('2019-10' || '-01')::date + interval '1 month'如果date_column上的索引可用,则此公式允许用于查询。
如果你不关心这个,你可以使用to_char()
where to_char(date_column, 'YYYY-MM') = '2019-10'发布于 2019-10-08 13:35:47
一种方法是分别检查YEAR和MONTH:
SELECT *
FROM my_table
WHERE EXTRACT(YEAR FROM date_column) = 2019
AND EXTRACT(MONTH FROM date_column) = 10SQL Fiddle
发布于 2019-10-08 14:45:06
大多数人忘记的一个很好的选择是让列保持为character(7),并像现在一样插入它。使用= < <= > >=的字符串比较都会正常工作,只要您坚持ISO-8601格式,就像您给出的示例一样,即YYYY-MM。您实际上不需要使用日期格式。
但是,这假设您的有效性检查是在应用程序中完成的,这将是避免使用数据库中针对current_date的简单解决方案时遇到的时区问题的最佳方法。这是对你的早期警告,因为你不会知道你有一个时区问题,直到客户抱怨他们的付款没有处理。
https://stackoverflow.com/questions/58287433
复制相似问题