'cast'附近的语法不正确

时间:2011-05-24 14:23:52

标签: tsql

无法弄清楚为什么我会收到错误

  

substring(cast(CASE WHEN l.assigned IS   NOT NULL然后l.assigned ELSE   l2.assigned END),0,17)as [TEST1]

更新:

我试图调整的原始行是以下...想要取出转换因为我不想要日期时间的格式:

  

,else substring(convert(varchar,   cast(例如,当l.assigned IS NOT NULL时   然后我分配了ELSE l2.assigned END   as datetime),126),0,17)end)as   varchar(20))为[TEST1]

我还试过这个,我忘了提及

  

substring(cast(CASE WHEN l.assigned IS   NOT NULL然后l.assigned ELSE   l2.assigned as datetime END),0,17)   作为[TEST1]

错误:关键字'as'附近的语法不正确。

4 个答案:

答案 0 :(得分:1)

CAST需要一个似乎缺失的AS datatype

e.g。

SELECT SUBSTRING(CAST(
         CASE WHEN 'foo' IS NOT NULL THEN 'foo' ELSE 'FOO' END AS VARCHAR(100))
       , 0, 17) AS [TEST1]

您还可以使用ISNULLCOALESCE来缩短代码。

SELECT SUBSTRING(CAST(COALESCE(l.assigned,l2.assigned) AS VARCHAR(100)), 0, 17) 
                                                                       AS [TEST1]

答案 1 :(得分:1)

您收到错误,因为您未将数据类型指定为详细here。语法如下:

select cast('1/1/1911' as datetime)

您可以使用isnull(或coalesce)和left更简单地表达您的查询。请记住,除非您正在寻找特定的日期时间格式,否则您可以执行以下操作:

select left(isnull(l.assigned,l2.assigned),17) as [TEST1]

答案 2 :(得分:0)

您要投放的数据类型是什么?见参考文献:

http://msdn.microsoft.com/en-us/library/ms187928.aspx

您缺少'as'子句和数据类型。

答案 3 :(得分:0)

您需要将其强制转换为类型。

msdn: CAST and CONVERT