首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“YYYY”varchar在PostgreSQL中的自动转换

“YYYY”varchar在PostgreSQL中的自动转换
EN

Stack Overflow用户
提问于 2019-10-08 13:33:00
回答 3查看 238关注 0票数 0

我有一个date类型的列,其中只有年份和月份是狂欢的。我想在SQL查询中使用缩短的日期格式,例如:

代码语言:javascript
复制
SELECT * FROM my_table where date_column='2019-10';

当然,现在它会导致错误:

代码语言:javascript
复制
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的声明,但我不确定这是我在这里寻找的。

EN

回答 3

Stack Overflow用户

发布于 2019-10-08 13:34:35

我建议:

代码语言:javascript
复制
where date_column >= ('2019-10' || '-01')::date and
      date_column < ('2019-10' || '-01')::date + interval '1 month'

如果date_column上的索引可用,则此公式允许用于查询。

如果你不关心这个,你可以使用to_char()

代码语言:javascript
复制
where to_char(date_column, 'YYYY-MM') = '2019-10'
票数 2
EN

Stack Overflow用户

发布于 2019-10-08 13:35:47

一种方法是分别检查YEARMONTH

代码语言:javascript
复制
SELECT * 
FROM my_table 
WHERE EXTRACT(YEAR FROM date_column) = 2019
AND EXTRACT(MONTH FROM date_column) = 10

SQL Fiddle

票数 1
EN

Stack Overflow用户

发布于 2019-10-08 14:45:06

大多数人忘记的一个很好的选择是让列保持为character(7),并像现在一样插入它。使用= < <= > >=的字符串比较都会正常工作,只要您坚持ISO-8601格式,就像您给出的示例一样,即YYYY-MM。您实际上不需要使用日期格式。

但是,这假设您的有效性检查是在应用程序中完成的,这将是避免使用数据库中针对current_date的简单解决方案时遇到的时区问题的最佳方法。这是对你的早期警告,因为你不会知道你有一个时区问题,直到客户抱怨他们的付款没有处理。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58287433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档