SQL Server日期时间未正确显示
我为员工在过去一周的指定日期(2018年7月1日至8日)的第一名和最后一名创建了查询。我的问题是:SQL Server日期时间未正确显示,sql,sql-server,date,datetime,Sql,Sql Server,Date,Datetime,我为员工在过去一周的指定日期(2018年7月1日至8日)的第一名和最后一名创建了查询。我的问题是: select CredentialId, Value as Department, UID1FirstName +' '+ UID1LastName as EmployeeName, FIRSTIN, LASTOUT, DATEDIFF(HOUR, FIRSTIN, LASTOUT) as NUMBEROFHOUR
select
CredentialId,
Value as Department,
UID1FirstName +' '+ UID1LastName as EmployeeName,
FIRSTIN, LASTOUT,
DATEDIFF(HOUR, FIRSTIN, LASTOUT) as NUMBEROFHOURS from
(
select
CAST(dtDate as date) as LogDate,
MIN(CASE when ReaderName like '%ENTRY%' then dtDate END) as FIRSTIN,
MAX(CASE when ReaderName like '%EXIT%' then dtDate END) as LASTOUT,
CredentialId,
UID1FirstName,
UID1LastName,
Value
from Log_Transactions
inner join UserCredentials on UID1 = CredentialId
inner join UserDefinedFields on HostUserId = UserID
where dtDate between '2018-07-01' and '2018-07-08' and --EDIT DATES INSIDE, FORMATTED AS YY-MM-DD
UID1FirstName like '%JASTINE%' and --EDIT NAME INSIDE THE PERCENT SYMBOLS
Event = '2000' and FieldNo = '1'
group by
CAST(dtDate as DATE), CredentialId, UID1FirstName, UID1LastName, Value
)
as DT;
下面是该查询的结果:
我的问题是,当我输入此人的dtDate并将datetime转换为time时,只是为了方便地查看FirstIN和LastOUT的记录,FirstIN和LastOUT的值显示为空,其他输出为空
下面是添加的查询:
select
CredentialId,
Value as Department,
UID1FirstName +' '+ UID1LastName as EmployeeName,
convert(varchar(18), dtDate,1) as LogDATE,
FIRSTIN, LASTOUT,
DATEDIFF(HOUR, FIRSTIN, LASTOUT) as NUMBEROFHOURS from
(
select
CAST(dtDate as date) as LogDate,
MIN(CASE when ReaderName like '%ENTRY%' then convert(varchar(18), dtDate,108) END) as FIRSTIN,
MAX(CASE when ReaderName like '%EXIT%' then convert(varchar(18), dtDate,108) END) as LASTOUT,
CredentialId,
UID1FirstName,
UID1LastName,
Value,
dtDate
from Log_Transactions
inner join UserCredentials on UID1 = CredentialId
inner join UserDefinedFields on HostUserId = UserID
where dtDate between '2018-07-01' and '2018-07-08' and --EDIT DATES INSIDE, FORMATTED AS YY-MM-DD
UID1FirstName like '%JASTINE%' and --EDIT NAME INSIDE THE PERCENT SYMBOLS
Event = '2000' and FieldNo = '1'
group by
CAST(dtDate as DATE), CredentialId, UID1FirstName, UID1LastName, Value, dtDate
)
as DT;
下面是添加查询的结果:
select
CredentialId,
Value as Department,
UID1FirstName +' '+ UID1LastName as EmployeeName,
convert(varchar(18), dtDate,1) as LogDATE,
FIRSTIN, LASTOUT,
DATEDIFF(HOUR, FIRSTIN, LASTOUT) as NUMBEROFHOURS from
(
select
CAST(dtDate as date) as LogDate,
MIN(CASE when ReaderName like '%ENTRY%' then convert(varchar(18), dtDate,108) END) as FIRSTIN,
MAX(CASE when ReaderName like '%EXIT%' then convert(varchar(18), dtDate,108) END) as LASTOUT,
CredentialId,
UID1FirstName,
UID1LastName,
Value,
dtDate
from Log_Transactions
inner join UserCredentials on UID1 = CredentialId
inner join UserDefinedFields on HostUserId = UserID
where dtDate between '2018-07-01' and '2018-07-08' and --EDIT DATES INSIDE, FORMATTED AS YY-MM-DD
UID1FirstName like '%JASTINE%' and --EDIT NAME INSIDE THE PERCENT SYMBOLS
Event = '2000' and FieldNo = '1'
group by
CAST(dtDate as DATE), CredentialId, UID1FirstName, UID1LastName, Value, dtDate
)
as DT;
以下是我想要生成的示例输出:
谢谢你的帮助 尝试在最外面的
上设置格式,选择,因为子查询中的数据已正确分组,不需要额外转换
select
CredentialId,
Value as Department,
UID1FirstName +' '+ UID1LastName as EmployeeName,
CONVERT(DATE, FIRSTIN) AS LogDATE,
CONVERT(VARCHAR(18), FIRSTIN, 108) AS FIRSTIN,
CONVERT(VARCHAR(18), LASTOUT, 108) AS LASTOUT,
DATEDIFF(HOUR, FIRSTIN, LASTOUT) as NUMBEROFHOURS from
(
select
CAST(dtDate as date) as LogDate,
MIN(CASE when ReaderName like '%ENTRY%' then dtDate END) as FIRSTIN,
MAX(CASE when ReaderName like '%EXIT%' then dtDate END) as LASTOUT,
CredentialId,
UID1FirstName,
UID1LastName,
Value
from Log_Transactions
inner join UserCredentials on UID1 = CredentialId
inner join UserDefinedFields on HostUserId = UserID
where dtDate between '2018-07-01' and '2018-07-08' and --EDIT DATES INSIDE, FORMATTED AS YY-MM-DD
UID1FirstName like '%JASTINE%' and --EDIT NAME INSIDE THE PERCENT SYMBOLS
Event = '2000' and FieldNo = '1'
group by
CAST(dtDate as DATE), CredentialId, UID1FirstName, UID1LastName, Value
)
as DT;
问题是什么?你改变了小组,这就是你得到的。为什么要这样做,而不保持初始查询的完整性,并将其包装在另一个select中以更改字段格式?在同一行上是否有类似Entry或Exit的读取器名称?如果不是,Case的结束条件将始终返回First-In或First-Out列的null。是。根据日期和时间,我在每一行上都有一个进入和退出的ReaderName。当我将dtDate添加到Group by时,它不会显示最小和最大时间,而是根据条件显示所有结果,但当我删除Group by上的dtDate时,它会显示一个错误,如:Msg 8120,级别16,状态1,第19行“Log_Transactions.dtDate”列在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中。