从字符串4转换日期时间的语法错误

本文关键字:语法 错误 时间 日期 字符串 转换 | 更新日期: 2023-09-27 18:11:38

执行以下代码时出现此代码错误。如能帮助,不胜感激

DECLARE @Last_Timestamp DATETIME, 
        @New_Timestamp  DATETIME 
SELECT DISTINCT Rtrim(of_displayname) + ' (' 
                + Rtrim(ro_officer) + ')', 
                CONVERT(DATETIME, CONVERT(CHAR(11), ro_shift_start, 106), 106), 
                Rtrim(ac_name) + ' (' + Rtrim(ac_pin) + ')', 
                ro_officer 
FROM   roster WITH(nolock), 
       template WITH(nolock), 
       activity WITH(nolock), 
       officer WITH(nolock) 
WHERE  ro_status = 'INFO' 
       AND ro_activity IN ( 'LEAVE', 'SAL LEAVE' ) 
       AND ro_timestamp > @Last_Timestamp 
       AND ro_timestamp <= @New_Timestamp 
       AND ro_shift_start > Getdate() 
       AND ac_pin = to_activity 
       AND to_pin = ro_officer 
       AND Unicode(to_type) = Unicode('M') 
       AND ro_officer = of_pin 
       --AND (Of_Payroll_No    IN ('w','s')   
       AND ac_product_code IN ( '01', '09' ) /* Corporate Only */ /* W & S */ 
UNION 
SELECT [officer], 
       [activity], 
       [status], 
       [comment] 
FROM   production.rolecall.[dbo].[holidayrequest] 
ORDER  BY Rtrim(of_displayname) + ' (' 
          + Rtrim(ro_officer) + ')',RTRIM(Of_Displayname)  + ' (' + RTRIM(Ro_Officer) + ')',CONVERT(DATETIME,CONVERT(CHAR(11), RO_Shift_Start,106),106)

从字符串4转换日期时间的语法错误

这里有3个地方可以进行日期转换:

  • CONVERT(DATETIME, CONVERT(CHAR(11), ro_shift_start, 106), 106)
  • CONVERT(DATETIME,CONVERT(CHAR(11), RO_Shift_Start,106),106)
  • UINON

前两种情况看起来你实际上是在努力度过没有时间的一天。如果是,则获取没有时间的日期;有多种方法可以做到这一点,但在sql server的最新版本中,将其转换为date将工作得很好:

select cast(columnname as date) as [columnname]

或者如果你真的需要datetime:

 select cast(cast(columnname as date) as datetime) as [columnname]

在其他数据库版本中,您可以使用"将其转换为float"方法:

select cast(floor(cast(columnname as float)) as datetime) as [columnname]

UNION更有趣;看起来它们是非常不同的形状——在这种情况下:为什么要合并它们?我非常怀疑[activity]datetime,但这是它将成为专栏的一部分。这个错误完全有可能来自于试图将[activity]转换为datetime