工作中遇到的几个SQL写法(自用)

一、如何写倒计时

select id,

       type,

       active_flag,

       message,

       to_char(start_time, 'YYYY/MM/DD HH24:MI:SS') as start_time,

       to_char(end_time, 'YYYY/MM/DD HH24:MI:SS')  as end_time,

       sysdate,

       floor((end_time-sysdate)*86400) as djs,   --倒计时,当前时间距离截止时间还有多长时间的总秒数

      floor(floor((end_time-sysdate)*86400)/3600) as hour,       --时

     floor( mod((end_time-sysdate)*86400,3600)/60) as minute,     --分

    mod((mod((end_time-sysdate)*86400,3600)) ,60) as second       --秒

  from UP_MAINTENANCE

 where type = 'pc'

1.floor()向下取整函数(java同理)

2.modnum1 num2)求余数,num1为被除数,num2为除数(java则是num1%num2

3.(end_time-sysdate)*86400 两个日期相减是以天为单位如图。

乘以86400化为秒数(3600*24 = 86400

 二、锁表怎么解决

查看所有数据库中谁被锁住了:

SELECT object_name, machine, s.sid, s.serial#

FROM gv$locked_object l, dba_objects o, gv$session s

WHERE l.object_id = o.object_id

AND l.session_id = s.sid;

解锁表:

alter system kill session '最后一条sid,最后一条serial’;

三、结果由多列合成一列(LISTAGG函数)

SELECT LISTAGG(aaa345,chr(10)) WITHIN GROUP(ORDER BY(aaa345)) aaa345,
       LISTAGG(SUM(je),chr(10)) WITHIN GROUP(ORDER BY(aaa345)) ZJE,
       LISTAGG((case when sum(jsje)>0 then '是' else '否' end),chr(10)) WITHIN GROUP(ORDER BY(aaa345)) SFJS,
       LISTAGG(sum(jsje),chr(10)) WITHIN GROUP(ORDER BY(aaa345)) ZJSJE,
       LISTAGG(sum(wjsje),chr(10)) WITHIN GROUP(ORDER BY(aaa345)) ZWJSJE
  FROM (SELECT (SELECT AAA103 FROM AA10_TABLE WHERE AAA100 ='AAA036' AND AAA102 = HNSI_BDDYYY.ic61.AAA345 )aaa345, 
        aae014, SUM(aae019) je,
          (CASE
         WHEN aae014 = 1 THEN
          sum(aae019)
         ELSE
          0
       END) jsje,
       (CASE
         WHEN aae014 = 2 THEN
          sum(aae019)
         ELSE
          0
       END) wjsje
          FROM HNSI_BDDYYY.ic61
         WHERE aaz257 = $aaz257
           AND aae014 IN ('1', '2')
         GROUP BY aaa345, aae014)
 GROUP BY aaa345
 ;

效果图:

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SQL Server 的自定义函数是用 T-SQL 编写的存储过程,可以在 T-SQL 语句调用,并返回一个值。它的语法如下: ``` CREATE FUNCTION function_name ( @parameter1 datatype, @parameter2 datatype, ... ) RETURNS return_datatype AS BEGIN -- function body DECLARE @local_variable datatype -- logic to perform the task RETURN return_value END ``` 下面是一个简单的例子,它创建了一个名为 "GetSum" 的自定义函数,接收两个整数并返回它们的和: ``` CREATE FUNCTION GetSum (@num1 INT, @num2 INT) RETURNS INT AS BEGIN RETURN (@num1 + @num2) END ``` 然后,您可以在 T-SQL 语句调用该函数,如下所示: ``` SELECT dbo.GetSum(10, 20) ``` 输出结果将是 30。 ### 回答2: 在SQL Server,可以使用以下的语法创建自定义函数: CREATE FUNCTION 函数名(@参数1 数据类型, @参数2 数据类型, ...) RETURNS 返回值的数据类型 BEGIN -- 函数体 -- 可以包含任意的SQL语句和逻辑 -- 最后使用RETURN语句返回结果 RETURN 结果值 END 下面举一个例子来说明自定义函数的写法: 我们创建一个自定义函数,用于计算员工的年薪总额。假设有一个名为Employees的表,包含了员工的信息,其有一个字段是Salary,表示员工的月薪。 首先,需要创建一个函数,计算每位员工的年薪: CREATE FUNCTION CalculateAnnualSalary(@salary DECIMAL(10,2)) RETURNS DECIMAL(10,2) BEGIN DECLARE @annualSalary DECIMAL(10,2) SET @annualSalary = @salary * 12 RETURN @annualSalary END 接下来,我们可以在查询使用这个自定义函数,来计算所有员工的年薪总额: SELECT SUM(dbo.CalculateAnnualSalary(Salary)) AS TotalAnnualSalary FROM Employees 在上述的例子,我们创建了一个名为CalculateAnnualSalary的函数,该函数接受一个参数@salary,返回值为DECIMAL(10,2)类型。在函数体,我们用参数的值乘以12来计算年薪,并将结果保存在一个变量@annualSalary。最后使用RETURN语句返回结果。 在查询,我们通过调用这个自定义函数来计算所有员工的年薪总额,并将结果赋给一个名为TotalAnnualSalary的别名。 ### 回答3: 在SQL Server,我们可以通过CREATE FUNCTION语句来创建自定义函数。函数可以用于执行一系列操作,并返回一个值。 下面是一个例子来说明自定义函数的写法: ```sql -- 创建一个函数,计算两个数的和 CREATE FUNCTION dbo.GetSum ( @num1 INT, @num2 INT ) RETURNS INT AS BEGIN DECLARE @sum INT -- 执行计算 SET @sum = @num1 + @num2 -- 返回结果 RETURN @sum END ``` 在上面的例子,我们定义了一个名为dbo.GetSum的函数。函数接受两个整数参数@num1和@num2,并返回一个整数。在函数体,我们声明了一个@sum变量,用于存储计算结果。然后,我们使用SET语句将@sum变量设置为@num1和@num2的和。最后,使用RETURN语句返回计算结果。 要调用自定义函数,可以使用SELECT语句: ```sql -- 调用自定义函数,并输出结果 SELECT dbo.GetSum(10, 5) AS Sum ``` 在上述代码,我们使用SELECT语句调用GetSum函数,并传递了两个整数参数10和5。结果将作为Sum列输出。 以上是一个简单的例子来说明SQL Server自定义函数的写法。实际应用,可以根据需求编写更加复杂的函数来实现各种功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值