我有以下查询:
SELECT
[tblstudentrakazot].studentid, firstname, lastname, tblRakezetSchedule.*
FROM
tblRakezetSchedule
INNER JOIN
[tblstudentrakazot] ON [tblstudentrakazot].scheduleID = tblRakezetSchedule.scheduleid
INNER JOIN
tblstudents ON [tblstudentrakazot].studentid = tblstudents.studentid
WHERE
scheduleday = datepart(w,convert(datetime,'21/2/2016',103))
AND tblRakezetSchedule.rakezetID = 182
ORDER BY
replace(scheduletimefrom, ':', '')
当从SQL Server Management Studio运行时,它可以完美运行并生成3条记录。
从我的 VBscript 应用程序运行时,我没有收到任何记录
问题似乎出在引用日期scheduleday = datepart(w,convert(datetime,'21/2/2016',103))
的过滤器中 - 当我将其注释掉时,查询有效。
有谁知道问题可能是什么?
我尝试过使用日期设置,但这并没有改变任何东西。我尝试在WHERE
中做CONVERT(int,scheduleday)
- 这也无济于事,因为scheduleday
已经是一个数字格式字段。我尝试在日期部分中使用 dw
而不是 w
- 也没有变化。
提前致谢
更新:
当我执行WHERE CONVERT(int,scheduleday) = 1
时,查询有效
另外 - 我看到CONVERT(int,datepart(w,convert(datetime,'21/02/2016',103)))
也正确地给出了 1。奇怪的是,即使它们都转换为 INT
,1 <> 1
这是我的VB脚本:
sql = "SELECT [tblstudentrakazot].studentid, firstname, lastname, tblRakezetSchedule.* FROM tblRakezetSchedule"
sql = sql & " INNER join [tblstudentrakazot] on [tblstudentrakazot].scheduleID = tblRakezetSchedule.scheduleid "
sql = sql & " INNER join tblstudents on [tblstudentrakazot].studentid = tblstudents.studentid"
sql = sql & " WHERE "
sql = sql & " CONVERT(int,scheduleday) = datepart(w,convert(datetime,'" & cleanSQL(planneddate) & "',103)) AND "
sql = sql & " tblRakezetSchedule.rakezetID = " & CleanSQL(x_rakezetID)
sql = sql & " ORDER BY replace(scheduletimefrom, ':', '')"
哪里:
x_rakezetID
= 182planneddate
是格式为 '21/02/2016' 的日期变量
SELECT datepart(w,convert(datetime,'21/2/2016',103))
的结果将取决于会话的语言设置(这取决于用户)。例如:
SET LANGUAGE German;
SELECT datepart(w,convert(datetime,'21/2/2016',103)) ;
。返回 7,而对于英语,它返回 1。
因此,我怀疑您在通过 SSMS 连接时与通过应用程序连接时使用不同的用户或至少不同的语言设置。