postgresql 如何回答这个问题:列出1986年雇用员工

xsuvu9jc  于 2022-11-04  发布在  PostgreSQL
关注(0)|答案(4)|浏览(160)

我正在做一些事情,这是我需要做的最后一件事。我已经尝试了一切,从

SELECT first_name, last_name, hire_date 
FROM employees
WHERE hire_date LIKE '1986%';

我一直收到此错误消息。
提示:没有运算符与给定的名称和参数类型匹配。您可能需要添加显式类型转换。SQL状态:42883人物:73
请让我知道我做错了什么
谢谢

a11xaf1n

a11xaf1n1#

将类似于日期的数据类型视为字符串几乎从来都不是一个好主意(尽管有些RDBMS支持它)。
大多数RDBMS都支持标准的sql函数extract()。您似乎正在使用postgresql,这也不例外,因此:

SELECT first_name, last_name, hire_date 
FROM employees
WHERE extract(year from hire_date) = 1986
atmip9wb

atmip9wb2#

您应该使用日期比较来表述:

where hire_date >= '1986-01-01' and
      hire_date < '1987-01-01'

为什么要使用直接比较法?有三个原因:

  • 这允许使用索引来优化查询。
  • 这允许使用分区。
  • 优化程序提供了更多信息。

通常,列上的函数会阻止所有这些优化方法,类型转换也是如此。
特别是不应该使用LIKE。这是一个字符串函数。您希望在日期上使用日期函数和运算符。

yi0zb3m4

yi0zb3m43#

这是正常的,因为hire_date肯定是DATE数据类型,而运算符Like只适用于String数据类型。Where DATEPART(year, hire_date) = '1986'

tmb3ates

tmb3ates4#

SELECT名字,姓氏,聘用日期FROM雇员WHERE聘用日期LIKE '1986-%- %';这样就行了

相关问题