小编Red*_*ght的帖子

寻找时间差异

我正在尝试编写一个存储过程来确定两次之间的秒数差异。如果我要对我知道可以使用的值进行硬编码

CAST(datediff(second, [start], [end])/3600.0 As Decimal(18,4)))
Run Code Online (Sandbox Code Playgroud)

但我只需要在满足条件的情况下才能获得差异。我的想法是做这样的事情

Declare @diff decimal(18,4)
Create Table #Dope
(
  date1 datetime
  ,inlate decimal(16,4)
)

INSERT INTO #Dope (date1) Values
('2016-01-04 08:08:47.000'),
('2016-01-04 08:25:59.000'),
('2016-01-04 08:27:47.000'),
('2016-01-04 08:00:00.000')

if CAST(date1 As Time) > '08:00:00.000'
--Here is where the capture would come but I am unsure of how to type it
SET @diff = CAST(datediff(second, [], [date1])/3600.0 As Decimal(18,4))
Run Code Online (Sandbox Code Playgroud)

如何将 Set 语句中的第一个日期时间设置为我需要秒差的当天上午 8 点?意思是,我不能只是将 '08:00:00.000' 硬编码到我的 Set 语句中,因为这两个日期我是不同的,这会给我跨越几天的秒数,这不是我所追求的。我只想看看 date1 和 '08:00:00.000' 之间的秒数差异

sql-server-2008 t-sql datetime

2
推荐指数
1
解决办法
51
查看次数

获取所有表类型的名称和定义

我知道如何创建表类型(用作表值参数) - 但是一旦创建,我如何查看它?

sql-server t-sql sql-server-2008-r2 table-valued-parameters

2
推荐指数
1
解决办法
8080
查看次数

将 If 语句添加到存储过程

我正在Insert Into我的存储过程中运行一条语句,该语句正在从 a 接收数据Table Value Parameter 我刚刚意识到我需要在执行插入之前首先验证表中不存在数据,因此我试图将我的过程更改为此

ALTER PROC [dbo].[CMT]
(@TempTable AS dbo.TableValue_ET READONLY)
AS
BEGIN

if b.[empID] NOT IN (Select [empID] FROM [Habib].[dbo].[SE])
BEGIN
  INSERT INTO [Habib].[dbo].[SE]([empID],[POD],[empNotes],[hiredate],[terminationdate],[terminationtime],[address],[city],[state])
  SELECT
  [empID]
  ,[POD]
  ,[empNotes]
  ,convert(varchar(10), [b].[hiredate], 101)
  ,convert(varchar(10), [b].[terminationdate], 101)
  ,[terminationtime] = LTRIM(RIGHT(CONVERT(VARCHAR(20), [b].[terminationdate], 100), 7))
  ,[address]
  ,[city]
  ,[state]
  FROM @TempTable b
END

END
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试保存此更新的语法时,出现错误

消息 4104,级别 16,状态 1,过程 UpdateShippingExceptions,第 7 行
无法绑定多部分标识符“b.empID”。

我必须更改什么才能empID在插入之前首先检查表中是否已经存在?

sql-server t-sql sql-server-2008-r2

2
推荐指数
1
解决办法
336
查看次数