2.5.4 计算工作时间的函数.sql

本文介绍了一个SQL脚本,用于创建工作时间表,并定义了计算任意两个日期间总工作时间的函数。通过使用CASE WHEN语句和DATE_DIFF函数精确计算工作分钟数。

 if exists (select * from dbo.sysobjects where id = object_id(N'[tb_worktime]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [tb_worktime]
GO

--定义工作时间表
CREATE TABLE tb_worktime(
 ID       int identity(1,1) PRIMARY KEY,            --序号
 time_start smalldatetime,                            --工作的开始时间
 time_end  smalldatetime,                           --工作的结束时间
 worktime  AS DATEDIFF(Minute,time_start,time_end)  --工作时数(分钟)
)
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_WorkTime]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_WorkTime]
GO

--计算两个日期之间的工作时间
CREATE FUNCTION f_WorkTime(
@date_begin datetime,  --计算的开始时间
@date_end datetime     --计算的结束时间
)RETURNS int
AS
BEGIN
 DECLARE @worktime int
 IF DATEDIFF(Day,@date_begin,@date_end)=0
  SELECT @worktime=SUM(DATEDIFF(Minute,
   CASE WHEN CONVERT(VARCHAR,@date_begin,108)>time_start
    THEN CONVERT(VARCHAR,@date_begin,108)
    ELSE time_start END,
   CASE WHEN CONVERT(VARCHAR,@date_end,108)<time_end
    THEN CONVERT(VARCHAR,@date_end,108)
    ELSE time_end END))
  FROM tb_worktime
  WHERE time_end>CONVERT(VARCHAR,@date_begin,108)
   AND time_start<CONVERT(VARCHAR,@date_end,108)
 ELSE
  SET @worktime
   =(SELECT SUM(CASE
     WHEN CONVERT(VARCHAR,@date_begin,108)>time_start
     THEN DATEDIFF(Minute,CONVERT(VARCHAR,@date_begin,108),time_end)
     ELSE worktime END)
    FROM tb_worktime
    WHERE time_end>CONVERT(VARCHAR,@date_begin,108))
   +(SELECT SUM(CASE
     WHEN CONVERT(VARCHAR,@date_end,108)<time_end
     THEN DATEDIFF(Minute,time_start,CONVERT(VARCHAR,@date_end,108))
     ELSE worktime END)
    FROM tb_worktime
    WHERE time_start<CONVERT(VARCHAR,@date_end,108))
   +CASE
    WHEN DATEDIFF(Day,@date_begin,@date_end)>1
    THEN (DATEDIFF(Day,@date_begin,@date_end)-1)
     *(SELECT SUM(worktime) FROM tb_worktime)
    ELSE 0 END
 RETURN(@worktime)
END

### 可能的原因分析 在 Hadoop 环境下执行 `tar` 命令解压文件时,如果遇到 `'无法 open: 没有那个文件或目录'` 的错误,通常可能由以下几个原因引起: 1. 文件路径不正确或者文件不存在。这可能是由于输入的文件名拼写错误或者是文件未被上传到指定位置造成的[^1]。 2. 权限不足。当前用户可能没有足够的权限去访问目标文件或其所在目录[^2]。 ### 解决方案 #### 验证文件存在与否及路径准确性 首先确认 `hbase-2.5.4-bin.tar.gz` 是否确实存在于预期的工作目录中。可以使用以下命令来检查: ```bash ls -l /path/to/hbase-2.5.4-bin.tar.gz ``` 如果该命令返回的信息显示文件不存在,则需要重新上传文件至正确的路径并再次尝试解压缩操作。 #### 调整文件权限 假如文件已经位于正确的位置但是仍然提示上述错误消息,那么很可能是权限设置的问题。可以通过更改文件所属权以及赋予适当读取和执行权限给相关用户组来进行修正: ```bash sudo chown hadoop:hadoop /path/to/hbase-2.5.4-bin.tar.gz chmod u+rwx,g+rx,o-rwx /path/to/hbase-2.5.4-bin.tar.gz ``` 之后再试一次解档动作应该就不会碰到之前提到的那个特定异常状况了. 另外,在某些情况下SELinux也可能阻止正常运行这些指令;如果是这种情况的话则需临时关闭它来做测试(注意这不是长久之计),方法如下所示: ```bash setenforce 0 ``` 最后记得把 SELinux 放回 enforcing mode 下面以维持系统的安全性设定: ```bash setenforce 1 ``` ### 注意事项 当处理完毕后,请务必验证新安装好的 Apache HBase 版本是否能够成功启动及其基本功能运作无误前不要继续其他更复杂的配置工作流程。 ```bash [hadoop@master ~]$ $HBASE_HOME/bin/start-hbase.sh ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值