我需要帮助调整下面的查询才能在ms sql下工作。我将Access数据库迁移到SQL Server,下面的查询正在下降。
我收到以下错误:
“执行数据库查询时出错。[Macromedia] [SQLServer JDBC驱动程序] [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
答案 0 :(得分:1)
VBA中的TimeValue函数返回日期字符串的时间部分作为日期变体。
对于MSSQL 2008及更高版本,您可以使用以下方式转换为时间:
CAST(M.DateToShow AS time)
而不是
TimeValue(M.DateToShow)
参考文献: