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 2014 兼容级别错误

将访问代码更改为 sql server

LAG 不是公认的内置函数名称

SQL-server'WEEKDAY'不是公认的内置函数名称[关闭]

如何在 SQL Server 2012 中使用 TRUNC 函数,因为我得到 'TRUNC' 不是一个公认的内置函数名称。'?