Sql 提取(从现在开始的一周)错误

Sql 提取(从现在开始的一周)错误,sql,firebird,firebird2.5,Sql,Firebird,Firebird2.5,我在我的树莓上运行firebird 2.5超经典。我执行以下查询,它给出以下错误: SELECT foodmanager1.F_US_FIRSTNAME,foodmanager1.F_US_LASTNAME, foodmanager1.F_US_PICTURE_URL, foodmanager2.F_US_FIRSTNAME, foodmanager2.F_US_LASTNAME, foodmanager2.F_US_PICTURE_URL, duty.F_US_FIRSTNAME, dut

我在我的树莓上运行firebird 2.5超经典。我执行以下查询,它给出以下错误:

SELECT foodmanager1.F_US_FIRSTNAME,foodmanager1.F_US_LASTNAME, 
foodmanager1.F_US_PICTURE_URL,
foodmanager2.F_US_FIRSTNAME, foodmanager2.F_US_LASTNAME, 
foodmanager2.F_US_PICTURE_URL,
duty.F_US_FIRSTNAME, duty.F_US_LASTNAME,
duty.F_US_PICTURE_URL,
a.F_FD_DATE from
    T_FOOD_DUTY a
inner join T_USER foodmanager1 on a.F_US_ID1 = foodmanager1.F_US_ID
inner join T_USER foodmanager2 on a.F_US_ID2 = foodmanager2.F_US_ID
inner join T_USER duty on a.F_US_ID3 = duty.F_US_ID
where extract(week from a.F_FD_DATE) = extract(week from 'Now')
出现此错误时:

输入数据类型中不存在指定的提取部分

SQL错误代码=~105

我知道问题出在
提取(从“现在”开始的一周)
,因为当我手动将其替换为一个数字时,确实会得到一些结果


你知道问题是什么吗,或者你有其他选择吗?

问题是
提取
接受任何数据类型,但只适用于
日期
时间
时间戳
类型。在此上下文中,
'Now'
只是一个
char(3)
,因此不能使用extract(它不能从
char
类型中提取数据)

这种混淆源于这样一个事实,即在某些上下文中(例如分配或显式转换到
日期
时间
时间戳
),
'Now'
将产生当前日期/时间。它在这种情况下不起作用,因为Firebird不知道它需要三种类型中的哪一种;理论上,
extract
接受任何类型,它实际上可以做什么取决于它接收的类型

您需要显式地将其强制为
日期
(或
时间戳
):

  • 使用显式强制转换:

    extract(week from cast('Now' as date))
    
  • 使用类型介绍人(也称为速记演员):

  • 或者,按照中的建议,使用SQL标准“函数”
    current\u date
    current\u timestamp

    extract(week from current_date)
    

  • 使用SQL标准
    CURRENT\u TIMESTAMP
    (或
    CURRENT\u DATE
    ,因为提取周时时间部分并不重要),而不是
    'NOW'

    extract(week from CURRENT_TIMESTAMP)
    
    或者,如果您确实想使用
    “现在”
    ,请将其转换为最新版本:

    extract(week from CAST('Now' AS DATE))
    

    我“借用”了你关于使用当前时间戳的建议,希望你不介意:)选项2-有文档记录吗?我看到的最相似的事情是为字符串文本常量指定编码/排序规则。但是指定这样的类型-我想我第一次在FB@Arioch'是:,这也在SQL标准中指定(尽管在那里它是为格式
    'yyyy-MM-dd hh:MM:ss.ssssss'
    定义的,而不是为
    'now'
    之类的内容定义的)。
    extract(week from CAST('Now' AS DATE))