TimeValue 不是可识别的内置函数名称
Posted
技术标签:
【中文标题】TimeValue 不是可识别的内置函数名称【英文标题】:TimeValue is not a recognized built-in function name 【发布时间】:2015-07-15 19:28:37 【问题描述】:我需要帮助调整下面的查询以在 ms sql 下工作。我将 Access 数据库迁移到 SQL Server,下面的查询正在下降。
我收到以下错误:
“执行数据库查询时出错。[Macromedia][SQLServer JDBC Driver][SQLServer]'TimeValue' 不是可识别的内置函数名。”
提前谢谢你。
SELECT M.MessageID, M.Subject, M.ShortDesc, M.subName, M.Submitter, C.CategoryName,
DateValue(
IIF (
DatePart( 'w', IIF(TimeValue(M.DateToShow)<='10:00',M.DateToShow,DateAdd('d',1,M.DateToShow)) ) = 1,
DateAdd( 'd', 1, IIF(TimeValue(M.DateToShow)<='10:00',M.DateToShow,DateAdd('d',1,M.DateToShow)) ),
IIF(
DatePart( 'w', IIF(TimeValue(M.DateToShow)<='10:00',M.DateToShow,DateAdd('d',1,M.DateToShow)) ) = 7,
DateAdd( 'd', 2, IIF(TimeValue(M.DateToShow)<='10:00',M.DateToShow,DateAdd('d',1,M.DateToShow)) ),
IIF(TimeValue(M.DateToShow)<='10:00',M.DateToShow,DateAdd('d',1,M.DateToShow))
),
)
) AS DateToShow
FROM MessageInfo M, Categories C
WHERE M.Approved = true
AND C.CategoryID = M.Category
ORDER BY C.CategoryPreference, C.CategoryName,
DateValue(
IIF (
DatePart( 'w', IIF(TimeValue(M.DateToShow)<='10:00',M.DateToShow,DateAdd('d',1,M.DateToShow)) ) = 1,
DateAdd( 'd', 1, IIF(TimeValue(M.DateToShow)<='10:00',M.DateToShow,DateAdd('d',1,M.DateToShow)) ),
IIF(
DatePart( 'w', IIF(TimeValue(M.DateToShow)<='10:00',M.DateToShow,DateAdd('d',1,M.DateToShow)) ) = 7,
DateAdd( 'd', 2, IIF(TimeValue(M.DateToShow)<='10:00',M.DateToShow,DateAdd('d',1,M.DateToShow)) ),
IIF(TimeValue(M.DateToShow)<='10:00',M.DateToShow,DateAdd('d',1,M.DateToShow))
),
)
)
DESC, M.Subject
【问题讨论】:
不确定 TimeValue 是什么?那是访问功能吗?如果是这样,它会返回什么?我建议在使用 DatePart 和 DateAdd 时不要使用这些 datepart 快捷方式。这是一个偏好,但将实际名称放在那里会更清楚。 【参考方案1】:VBA 中的 TimeValue 函数将日期字符串的时间部分作为日期变量返回。
对于 MSSQL 2008 及更高版本,您可以使用以下方法转换为时间:
CAST(M.DateToShow AS time)
而不是
TimeValue(M.DateToShow)
参考资料:
VBA TimeValue Function How to get Time from DateTime format in SQL?【讨论】:
如果将“TimeValue(M.DateToShow)”更改为“CAST(M.DateToShow AS time)”我收到以下错误:[SQLServer JDBC Driver][SQLServer]Invalid parameter 1 specified for dateadd。 你可以试试 CONVERT(VARCHAR(8),M.DateToShow),108)。您必须使用从 CreateODBCTime() 返回的相同时间,以便比较的类型匹配 添加“CONVERT(VARCHAR(8),M.DateToShow),108)”时出现以下错误:[SQLServer JDBC Driver][SQLServer]关键字“CONVERT”附近的语法不正确。 哎呀。删除 M.DateToShow 后多余的括号 我更新了查询。它适用于访问而不是sql。 CONVERT 附近的语法仍然不正确。以上是关于TimeValue 不是可识别的内置函数名称的主要内容,如果未能解决你的问题,请参考以下文章
为啥在sql sever中使用first和last函数查询,提示‘first’'last' 不是可以识别的 内置函数名称。
SQL-server'WEEKDAY'不是公认的内置函数名称[关闭]
如何在 SQL Server 2012 中使用 TRUNC 函数,因为我得到 'TRUNC' 不是一个公认的内置函数名称。'?