Sql 提取(从现在开始的一周)错误
我在我的树莓上运行firebird 2.5超经典。我执行以下查询,它给出以下错误: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
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))
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))