【问题标题】:Syntax error converting datetime from character string 4 [closed]从字符串4转换日期时间的语法错误[关闭]
【发布时间】:2014-07-07 09:26:54
【问题描述】:

执行以下代码时出现此代码错误.. 帮助将不胜感激

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)

【问题讨论】:

  • 请添加错误消息和ddl(数据库定义)。
  • Msg 241, Level 16, State 1, Line 1 从字符串转换日期时间的语法错误。
  • 您是否尝试过检查ro_shift_start 的内容,看看它们是否符合预期的格式?虽然请注意,由于 @Last_Timestamp@New_Timestamp 都是 null,但我们不应该期望此处顶部网格中有任何行...
  • 通过查看您的代码,您正在将 ro_shift_start 转换为 char,然后再次转换为 datetime,您不能只使用 ro_shift_start 而不是 CONVERT(DATETIME, CONVERT(CHAR(11), ro_shift_start, 106)?
  • @KiranHegde 我猜这是为了“获取没有时间的日期” - 在这种情况下,还有其他方法可以使用,但同样:显示的 应该是很好(但效率低下);在这种情况下,我强烈怀疑真正的问题是UNION

标签: c# sql datetime


【解决方案1】:

您在此处进行日期转换的地方有 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]

在其他数据库版本上,您可以使用狡猾的“将其转换为浮点数”方法:

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

UNION 更有趣;看起来这些是非常不同的形状 - 在这种情况下:你为什么要联合它们?我非常怀疑[activity]datetime,但那是它将成为一部分的列。此错误完全有可能来自尝试将[activity] 转换为datetime

【讨论】:

    猜你喜欢
    • 2011-08-15
    • 2022-08-04
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    • 2018-10-02
    • 2016-08-06
    相关资源
    最近更新 更多