热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

我在员工考勤计算中用到的一些视图和SQL

SELECT[EmploId],[EmploName],DATEADD(dd,number,BeginTime)asCheckDay,[Hours]ASTimeOfTravelFR
SELECT [EmploId]
      ,[EmploName]
      ,DATEADD(dd,number,BeginTime) as CheckDay
      ,[Hours] AS TimeOfTravel
  FROM [tbTravel4Project] a,(select distinct number from master..spt_values p) p
where  

    p.number between 0 and  DATEDIFF(dd,a.BeginTime,a.EndTime)

用来产生分行记录(有请假段和出差段等的处理)

declare @sql varchar(8000)
set @sql = ' SELECT [EmploId],[EmploName],[Dept],[BeginTime],[EndTime] '
select @sql = @sql + ' , max(case [LeaveReson] when ''' + [LeaveReson] + ''' then isnull([Hours],7) else 0 end) [' + [LeaveReson] + ']'
from (select distinct [LeaveReson] from [tbLeaveRecord]) as a
set @sql = @sql + '  from [tbLeaveRecord] where [Year] = 2010 and [Month] = 10 group by [EmploId],[EmploName],[Dept],[BeginTime],[EndTime]'
exec(@sql)

一个动态的行列转置(主要是对各类请假分类汇总)

 CREATE VIEW VI_CheckSystemData
AS
(
SELECT
       [EmploId]
      ,[EmploName]
      ,[CheckDay]
      ,MIN(TheCheckTime) AS OnWorkTime
      ,MAX(TheCheckTime) AS OffWorkTime
FROM
(
 SELECT     
  EmploId,
  EmploName,
  CONVERT(DATETIME, CONVERT(varchar, CheckTime, 101)) AS CheckDay,
  CONVERT(DATETIME, CONVERT(varchar, CheckTime, 114)) AS TheCheckTime
  FROM [tbTempCheckRecord]
 ) AS n
GROUP BY EmploId,EmploName,CheckDay
)

获取打卡记录的最早最晚时间(这里我提前提取该月打卡记录到了临时表)

 /****** Script for SelectTopNRows command from SSMS  ******/
  --4个时间点切割时间轴为5段,投下2个时间点,一种有5+4+3+2+1 =15种可能性
  CREATE VIEW VI_OnWorkingTime
  AS
  (
  SELECT [EmploId]
      ,[EmploName]
      ,[CheckDay]
      ,[OnWorkTime]
      ,[OffWorkTime]
      ,0 AS WorkTime
  FROM [VI_CheckSystemData]
  WHERE ([OnWorkTime] <&#39;8:45&#39; AND [OffWorkTime]<&#39;8:45&#39;)--(1)
  UNION ALL
  SELECT [EmploId]
      ,[EmploName]
      ,[CheckDay]
      ,[OnWorkTime]
      ,[OffWorkTime]
      ,DATEDIFF(MINUTE,&#39;8:45&#39;,[OffWorkTime]) AS WorkTime
  FROM [VI_CheckSystemData]
  WHERE [OnWorkTime] <&#39;8:45&#39; AND ([OffWorkTime] BETWEEN &#39;8:45&#39; AND &#39;12:00&#39;)--(2)
  UNION ALL
  SELECT [EmploId]
      ,[EmploName]
      ,[CheckDay]
      ,[OnWorkTime]
      ,[OffWorkTime]
      ,DATEDIFF(MINUTE,&#39;8:45&#39;,&#39;12:00&#39;) AS WorkTime
  FROM [VI_CheckSystemData]
  WHERE [OnWorkTime] <&#39;8:45&#39; AND ([OffWorkTime] BETWEEN &#39;12:00&#39; AND &#39;13:00&#39;) AND ([OffWorkTime] <> &#39;12:00&#39;)--(3)
  UNION ALL
  SELECT [EmploId]
      ,[EmploName]
      ,[CheckDay]
      ,[OnWorkTime]
      ,[OffWorkTime]
      ,WorkTime &#61; (DATEDIFF(MINUTE,&#39;8:45&#39;,[OffWorkTime])- 60)
  FROM [VI_CheckSystemData]
  WHERE [OnWorkTime] <&#39;8:45&#39; AND ([OffWorkTime] BETWEEN &#39;13:00&#39; AND &#39;17:30&#39;) AND ([OffWorkTime] <> &#39;13:00&#39;)--(4)
  UNION ALL
  SELECT [EmploId]
      ,[EmploName]
      ,[CheckDay]
      ,[OnWorkTime]
      ,[OffWorkTime]
      ,7.5 * 60 AS  WorkTime
  FROM [VI_CheckSystemData]
  WHERE ([OnWorkTime] <&#39;8:45&#39;) AND ([OffWorkTime] > &#39;17:30&#39;)--(5)
  UNION ALL
  SELECT [EmploId]
      ,[EmploName]
      ,[CheckDay]
      ,[OnWorkTime]
      ,[OffWorkTime]
      ,DATEDIFF(MINUTE,[OnWorkTime],[OffWorkTime]) AS WorkTime
  FROM [VI_CheckSystemData]
  WHERE ([OnWorkTime] BETWEEN &#39;8:45&#39; AND &#39;12:00&#39;) AND ([OffWorkTime] BETWEEN &#39;8:45&#39; AND &#39;12:00&#39;)--(6)
  UNION ALL
  SELECT [EmploId]
      ,[EmploName]
      ,[CheckDay]
      ,[OnWorkTime]
      ,[OffWorkTime]
      ,DATEDIFF(MINUTE,[OnWorkTime],&#39;12:00&#39;) AS WorkTime
  FROM [VI_CheckSystemData]
  WHERE ([OnWorkTime] BETWEEN &#39;8:45&#39; AND &#39;12:00&#39;) AND ([OffWorkTime] BETWEEN &#39;12:00&#39; AND &#39;13:00&#39;) AND ([OffWorkTime] <> &#39;12:00&#39;)--(7)
  UNION ALL
  SELECT [EmploId]
      ,[EmploName]
      ,[CheckDay]
      ,[OnWorkTime]
      ,[OffWorkTime]
      ,WorkTime &#61; (DATEDIFF(MINUTE,[OnWorkTime],[OffWorkTime]) - 60)
  FROM [VI_CheckSystemData]
  WHERE ([OnWorkTime] BETWEEN &#39;8:45&#39; AND &#39;12:00&#39;) AND ([OffWorkTime] BETWEEN &#39;13:00&#39; AND &#39;17:30&#39;) AND ([OffWorkTime] <> &#39;13:00&#39;)--(8)
  UNION ALL
  SELECT [EmploId]
      ,[EmploName]
      ,[CheckDay]
      ,[OnWorkTime]
      ,[OffWorkTime]
      ,WorkTime &#61; (DATEDIFF(MINUTE,[OnWorkTime],&#39;17:30&#39;) - 60)
  FROM [VI_CheckSystemData]
  WHERE ([OnWorkTime] BETWEEN &#39;8:45&#39; AND &#39;12:00&#39;) AND ([OffWorkTime] > &#39;17:30&#39;)--(9)
  UNION ALL
  SELECT [EmploId]
      ,[EmploName]
      ,[CheckDay]
      ,[OnWorkTime]
      ,[OffWorkTime]
      ,0 AS WorkTime
  FROM [VI_CheckSystemData]
  WHERE ([OnWorkTime] BETWEEN &#39;12:00&#39; AND &#39;13:00&#39;) AND ([OffWorkTime] BETWEEN &#39;12:00&#39; AND &#39;13:00&#39;)--(10)
  UNION ALL
  SELECT [EmploId]
      ,[EmploName]
      ,[CheckDay]
      ,[OnWorkTime]
      ,[OffWorkTime]
      ,DATEDIFF(MINUTE,&#39;13:00&#39;,[OffWorkTime]) AS WorkTime
  FROM [VI_CheckSystemData]
  WHERE ([OnWorkTime] BETWEEN &#39;12:00&#39; AND &#39;13:00&#39;) AND ([OffWorkTime] BETWEEN &#39;13:00&#39; AND &#39;17:30&#39;) AND ([OffWorkTime] <> &#39;13:00&#39;)--(11)
  UNION ALL
  SELECT [EmploId]
      ,[EmploName]
      ,[CheckDay]
      ,[OnWorkTime]
      ,[OffWorkTime]
      ,DATEDIFF(MINUTE,&#39;13:00&#39;,&#39;17:30&#39;) AS WorkTime
  FROM [VI_CheckSystemData]
  WHERE ([OnWorkTime] BETWEEN &#39;12:00&#39; AND &#39;13:00&#39;) AND ([OffWorkTime] > &#39;17:30&#39;)--(12)
  UNION ALL
  SELECT [EmploId]
      ,[EmploName]
      ,[CheckDay]
      ,[OnWorkTime]
      ,[OffWorkTime]
      ,DATEDIFF(MINUTE,[OnWorkTime],[OffWorkTime]) as WorkTime
  FROM [VI_CheckSystemData]
  WHERE ([OnWorkTime] BETWEEN &#39;13:00&#39; AND &#39;17:30&#39;) AND ([OffWorkTime] BETWEEN &#39;13:00&#39; AND &#39;17:30&#39;)--(13)
  UNION ALL
  SELECT [EmploId]
      ,[EmploName]
      ,[CheckDay]
      ,[OnWorkTime]
      ,[OffWorkTime]
      ,DATEDIFF(MINUTE,[OnWorkTime],&#39;17:30&#39;) AS WorkTime
  FROM [VI_CheckSystemData]
  WHERE ([OnWorkTime] BETWEEN &#39;13:00&#39; AND &#39;17:30&#39;) AND ([OffWorkTime] > &#39;17:30&#39;)--(14)
  UNION ALL
  SELECT [EmploId]
      ,[EmploName]
      ,[CheckDay]
      ,[OnWorkTime]
      ,[OffWorkTime]
      ,0 AS WorkTime
  FROM [VI_CheckSystemData]
  WHERE ([OnWorkTime] > &#39;17:30&#39;) AND ([OffWorkTime] > &#39;17:30&#39;)--(15)
  )
  这是根据公司考勤规则对上班时间的计算

   CREATE VIEW VI_OverWorkingTime
  AS
  (
  SELECT [EmploId]
      ,[EmploName]
      ,[CheckDay]
      ,[OnWorkTime]
      ,[OffWorkTime]
      ,DATEDIFF(MINUTE,&#39;17:30&#39;,[OffWorkTime]) AS OverWorkTime
  FROM [VI_CheckSystemData]
  WHERE ([OnWorkTime] <&#39;17:30&#39;) AND ([OffWorkTime] >&#61; &#39;17:30&#39;)
  UNION ALL
  SELECT [EmploId]
      ,[EmploName]
      ,[CheckDay]
      ,[OnWorkTime]
      ,[OffWorkTime]
      ,DATEDIFF(MINUTE,[OnWorkTime],[OffWorkTime]) AS OverWorkTime
  FROM [VI_CheckSystemData]
  WHERE ([OnWorkTime] >&#61; &#39;17:30&#39;) AND ([OffWorkTime] >&#61; &#39;17:30&#39;)
  UNION ALL
  SELECT [EmploId]
      ,[EmploName]
      ,[CheckDay]
      ,[OnWorkTime]
      ,[OffWorkTime]
      ,0 AS OverWorkTime
  FROM [VI_CheckSystemData]
  WHERE ([OnWorkTime] <&#39;17:30&#39;) AND ([OffWorkTime] <&#39;17:30&#39;)
  )

这是根据考勤规则对加班时间的计算

 两部分中是对一般情况的处理&#xff0c;后期处理需要根据工作日&#xff08;周一到周五&#xff09;放假&#xff0c;非工作日&#xff08;周六&#xff0c;周日&#xff09;上班的对照表再做处理

 Create View VI_CheckFinalResult
AS
SELECT [EmploId]
      ,[EmploName]
      ,[DeptId]
      ,[DeptName]
      ,[LenthOfService]
      ,[IsMid]
      ,[CheckDay]
      ,[OnWorkTime]
      ,[OffWorkTime]
      ,[TW]
      ,[TH]
      ,[TP]
      ,[TN]
      ,CASE WHEN [WorkingTime]>&#61; 7.5 THEN &#39;正常考勤&#39;
            WHEN [WorkingTime]<7.5 AND [WorkingTime]>&#61;6.5 THEN &#39;迟到早退&#39;
            WHEN [WorkingTime]<6.5 AND [WorkingTime]>&#61;4 THEN &#39;半天旷工&#39;
            WHEN [WorkingTime]<4 AND [WorkingTime]>&#61;0 THEN &#39;全天旷工&#39;
            ELSE &#39;系统异常&#39;    
       END AS Result
  FROM [VI_CheckTimeResut]

Create View VI_CheckTimeResut
AS
SELECT [EmploId]
      ,[EmploName]
      ,[DeptId]
      ,[DeptName]
      ,[LenthOfService]
      ,[IsMid]
      ,[CheckDay]
      ,[OnWorkTime]
      ,[OffWorkTime]
      ,[TW]
      ,ISNULL([TH],0) AS TH
      ,ISNULL([TP],0) AS TP
      ,ISNULL([TN],0) AS TN
      ,WorkingTime &#61; ([TW]&#43;ISNULL([TH],0)&#43;ISNULL([TP],0)&#43;ISNULL([TN],0))
      FROM [VI_CheckResult]
CREATE VIEW VI_CheckResult
AS
(
SELECT
 CheckObject.[EmploId]
,CheckObject.[EmploName]
,CheckObject.[DeptId]
,CheckObject.[DeptName]
,CheckObject.[LenthOfService]
,CheckObject.[IsMid]
,CheckObject.[CheckDay]
,TW.[OnWorkTime]
,TW.[OffWorkTime]
,CASE WHEN (TW.[OnWorkTime] IS NULL OR  TW.[OnWorkTime] &#61; &#39;&#39;) THEN &#39;0&#39; ELSE (TW.[WorkTime]/60.0)  END AS TW
,TH.[TimeOfLeave] AS TH
,TP.[TimeOfTravel] AS TP
,TN.[TimeOfTravel] AS TN
FROM
(
SELECT
 [tbTempCheckDay].[CheckDay]
 ,[tbTempEmploInfo].[EmploId]
 ,[tbTempEmploInfo].[EmploName]
 ,[tbTempEmploInfo].[DeptId]
 ,[tbTempEmploInfo].[DeptName]
 ,[tbTempEmploInfo].[LenthOfService]
 ,[tbTempEmploInfo].[IsMid]
 FROM [tbTempCheckDay] CROSS JOIN [tbTempEmploInfo]
 WHERE [tbTempCheckDay].[IsCheckable] &#61; 1
) AS CheckObject
LEFT JOIN
(
SELECT [EmploId]
      ,[CheckDay]
      ,[OnWorkTime]
      ,[OffWorkTime]
      ,[WorkTime]
  FROM [tbTempTimeOfWorking]
) AS TW ON CheckObject.[CheckDay] &#61; TW.[CheckDay] AND CheckObject.[EmploId] &#61; TW.[EmploId]
LEFT JOIN
(
SELECT [EmploId]
      ,[CheckDay]
      ,[TimeOfLeave]
  FROM [tbTempTimeOfLeave]
)AS TH ON CheckObject.[CheckDay] &#61; TH.[CheckDay] AND CheckObject.[EmploId] &#61; TH.[EmploId]
LEFT JOIN
(
SELECT [EmploId]
      ,[CheckDay]
      ,[TimeOfTravel]
  FROM [tbTempTimeOfNonProjectTravelHours]
)AS TP ON CheckObject.[CheckDay] &#61; TP.[CheckDay] AND CheckObject.[EmploId] &#61; TP.[EmploId]
LEFT JOIN
(
SELECT [EmploId]
      ,[CheckDay]
      ,[TimeOfTravel]
  FROM [tbTempTimeOfNonProjectTravelHours]
)AS TN ON CheckObject.[CheckDay] &#61; TN.[CheckDay] AND CheckObject.[EmploId] &#61; TN.[EmploId]
)

Create View VI_CheckDetailsReport
AS
(
SELECT --请假情况分析
        [EmploId]
       ,[EmploName]
       ,[Dept] AS [DeptName]
       ,[BeginTime]
       ,[EndTime]
       ,[AbsenceOfWork] &#61; NULL
       ,[LateComeOrEarlyGo] &#61; NULL
       ,[SickLeave] &#61; CASE WHEN [LeaveReson] &#61; &#39;病假&#39; AND [CoutSort] &#61; 1 THEN CONVERT(VARCHAR,(DATEDIFF(DAY,BeginTime,EndTime)&#43;1),8)
                           WHEN [LeaveReson] &#61; &#39;病假&#39; AND [CoutSort] &#61; 0 AND ([Hours] &#61; &#39;上午半天&#39; OR [Hours] &#61; &#39;下午半天&#39;) THEN &#39;0.5&#39;
                      END
       ,[SickLeave_Hours] &#61; CASE WHEN [LeaveReson] &#61; &#39;病假&#39; AND [CoutSort] &#61; 0 AND ([Hours] <> &#39;上午半天&#39; AND [Hours] <> &#39;下午半天&#39;) THEN [Hours] END
       ,[AbsenceLeave] &#61; CASE WHEN [LeaveReson] &#61; &#39;事假&#39; AND [CoutSort] &#61; 1 THEN CONVERT(VARCHAR,(DATEDIFF(DAY,BeginTime,EndTime)&#43;1),8)
                              WHEN [LeaveReson] &#61; &#39;事假&#39; AND [CoutSort] &#61; 0 AND ([Hours] &#61; &#39;上午半天&#39; OR [Hours] &#61; &#39;下午半天&#39;) THEN &#39;0.5&#39;
                      END
       ,[AbsenceLeave_Hours] &#61; CASE WHEN [LeaveReson] &#61; &#39;事假&#39; AND [CoutSort] &#61; 0 AND ([Hours] <> &#39;上午半天&#39; AND [Hours] <> &#39;下午半天&#39;) THEN [Hours] END
       ,[WeddingAndFuneral] &#61; CASE WHEN ([LeaveReson] &#61; &#39;婚假&#39; OR [LeaveReson] &#61; &#39;丧假&#39;) AND [CoutSort] &#61; 1 THEN CONVERT(VARCHAR,(DATEDIFF(DAY,BeginTime,EndTime)&#43;1),8) END
       ,[HomeLeave] &#61; CASE WHEN ([LeaveReson] &#61; &#39;探父母&#39; OR [LeaveReson] &#61; &#39;探配偶&#39;) AND [CoutSort] &#61; 1 THEN CONVERT(VARCHAR,(DATEDIFF(DAY,BeginTime,EndTime)&#43;1),8) END
       ,[MaternityAndCare] &#61; CASE WHEN ([LeaveReson] &#61; &#39;产假&#39; OR [LeaveReson] &#61; &#39;护理假&#39;) AND [CoutSort] &#61; 1 THEN CONVERT(VARCHAR,(DATEDIFF(DAY,BeginTime,EndTime)&#43;1),8) END
       ,[BirthControl] &#61; CASE WHEN [LeaveReson] &#61; &#39;节育假&#39; AND [CoutSort] &#61; 1 THEN CONVERT(VARCHAR,(DATEDIFF(DAY,BeginTime,EndTime)&#43;1),8) END
       ,[BreastFeedingLeave_Hours] &#61; CASE WHEN [LeaveReson] &#61; &#39;哺乳假&#39; AND [CoutSort] &#61; 0    THEN (CASE [Hours] WHEN &#39;上午半天&#39; THEN &#39;0.5&#39; WHEN &#39;下午半天&#39; THEN &#39;0.5&#39; ELSE [Hours] END) END
       ,[PaidHoliday] &#61; CASE WHEN [LeaveReson] &#61; &#39;带薪假&#39; AND [CoutSort] &#61; 1 THEN CONVERT(VARCHAR,(DATEDIFF(DAY,BeginTime,EndTime)&#43;1),8)
                           WHEN [LeaveReson] &#61; &#39;带薪假&#39; AND [CoutSort] &#61; 0 AND ([Hours] &#61; &#39;上午半天&#39; OR [Hours] &#61; &#39;下午半天&#39;) THEN &#39;0.5&#39;
                        END
       ,[Ohters] &#61;  CASE WHEN [LeaveReson] &#61; &#39;其他假&#39; AND [CoutSort] &#61; 1 THEN CONVERT(VARCHAR,(DATEDIFF(DAY,BeginTime,EndTime)&#43;1),8)
                         WHEN [LeaveReson] &#61; &#39;其他假&#39; AND [CoutSort] &#61; 0 AND ([Hours] &#61; &#39;上午半天&#39; OR [Hours] &#61; &#39;下午半天&#39;) THEN &#39;0.5&#39;
                         WHEN [LeaveReson] &#61; &#39;其他假&#39; AND [CoutSort] &#61; 0 AND ([Hours] <> &#39;上午半天&#39; OR [Hours] <> &#39;下午半天&#39;) THEN [Hours]
                    END
       ,[Bak]             
  FROM [tbTempLeaveRecord]
UNION ALL
SELECT --请假情况分析
        [EmploId]
       ,[EmploName]
       ,[DeptName]
       ,[BeginTime] &#61; [CheckDay]
       ,[EndTime] &#61;[CheckDay]
       ,[AbsenceOfWork] &#61; CASE WHEN [Result] &#61; &#39;全天旷工&#39; THEN &#39;1&#39;
                               WHEN [Result] &#61; &#39;半天旷工&#39; THEN &#39;0.5&#39;
                          END
       ,[LateComeOrEarlyGo] &#61; CASE WHEN [Result] &#61; &#39;迟到早退&#39; THEN &#39;1&#39;  END
       ,[SickLeave] &#61; NULL
       ,[SickLeave_Hours] &#61; NULL
       ,[AbsenceLeave] &#61; NULL
       ,[AbsenceLeave_Hours] &#61; NULL
       ,[WeddingAndFuneral] &#61; NULL
       ,[HomeLeave] &#61; NULL
       ,[MaternityAndCare] &#61; NULL
       ,[BirthControl] &#61; NULL
       ,[BreastFeedingLeave_Hours] &#61; NULL
       ,[PaidHoliday] &#61; NULL
       ,[Ohters] &#61;  NULL
       ,[Bak] &#61;  NULL            
  FROM [VI_CheckFinalResult] WHERE [Result] <> &#39;正常考勤&#39;
)  
GO

这里是更具规则出的考勤结论视图&#xff0c;里面涉及的工作日非工作日登记表和员工信息表都很简单。里面有个tempcheckday的表式一个月时间向量&#xff0c;其实该用master中的系统来生产&#xff0c;由于以前不太会也为了偷懒&#xff0c;就没有那样做。

整个考勤计算过程在一分钟左右&#xff08;2千人一个月的考勤&#xff09;。对了&#xff0c;上面还有三张表是从网上审批系统抽取出来的&#xff0c;就是对请假&#xff0c;出差之类的一个审批结果。

 

 

 

 

 

 

 

 

转:https://www.cnblogs.com/wangxiaosmile/archive/2010/10/26/1861226.html



推荐阅读
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • Android系统源码分析Zygote和SystemServer启动过程详解
    本文详细解析了Android系统源码中Zygote和SystemServer的启动过程。首先介绍了系统framework层启动的内容,帮助理解四大组件的启动和管理过程。接着介绍了AMS、PMS等系统服务的作用和调用方式。然后详细分析了Zygote的启动过程,解释了Zygote在Android启动过程中的决定作用。最后通过时序图展示了整个过程。 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 本文讨论了在使用sp_msforeachdb执行动态SQL命令时,当发生错误时如何捕获数据库名称。提供了两种解决方案,并介绍了如何正确使用'?'来显示数据库名称。 ... [详细]
  • 本文介绍了在Windows系统上使用C语言命令行参数启动程序并传递参数的方法,包括接收参数程序的代码和bat文件的编写方法,同时给出了程序运行的结果。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • 解决.net项目中未注册“microsoft.ACE.oledb.12.0”提供程序的方法
    在开发.net项目中,通过microsoft.ACE.oledb读取excel文件信息时,报错“未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序”。本文提供了解决这个问题的方法,包括错误描述和代码示例。通过注册提供程序和修改连接字符串,可以成功读取excel文件信息。 ... [详细]
  • 本文介绍了MVP架构模式及其在国庆技术博客中的应用。MVP架构模式是一种演变自MVC架构的新模式,其中View和Model之间的通信通过Presenter进行。相比MVC架构,MVP架构将交互逻辑放在Presenter内部,而View直接从Model中读取数据而不是通过Controller。本文还探讨了MVP架构在国庆技术博客中的具体应用。 ... [详细]
author-avatar
mobiledu2502932307
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有