我的查询有问题
USE [db]
GO
SELECT
TD.ID, LOM.ScanDate, RD.ProcessorType, RD.ProcessorResult, RD.Score
FROM
[dbo].[LogicalObject_Metadatas] LOM WITH(NOLOCK)
JOIN
[dbo].[LogicalObject] LO WITH(NOLOCK) ON LO.ID = LOM.OBJECTID
JOIN
[db2].[dbo].[JobData] JD With(NOLOCK) ON LO.DOCUMENTID = JD.DocumentID
JOIN
[db2].[dbo].[TaskData] TD WITH(NOLOCK) ON JD.ID = TD.ParentID
JOIN
[db2].[dbo].[RecognitionData] RD WITH(NOLOCK) ON TD.ID = RD.ID
WHERE
LOM.[Source] = 'MANUFAST_AVR_DNN_QA'
AND LOM.[ScanDate] > '2018-10-01'
AND LOM.[ScanDate] < '2018-10-16'
AND RD.[ProcessorType] IN ('F05AM', 'F06', 'F08', 'F09', 'F11', 'F12A')如果[ProcessorResult]是= F05AM,我希望将其转换为datetime;如果不是,则按其方式进行转换。
我试过使用IF,cast,但没有结果。
这就是查询的方式:

发布于 2018-10-17 15:02:10
您可以在您的case子句中使用select语句来实现这一点,同时还可以使用一些stuff调用来处理DDMMYY的输入格式(如果您愿意,可以将120样式替换为任何其他样式):
select
TD.ID,
LOM.ScanDate,
RD.ProcessorType,
case
when RD.ProcessorType = 'F05AM' and ISDATE(RD.ProcessorResult) = 1
then convert(varchar,convert(datetime,stuff(stuff(RD.ProcessorResult,5,0,'.'),3,0,'.'), 4),120)
else RD.ProcessorResult
end as ProcessorResult,
RD.Score
from [dbo].[LogicalObject_Metadatas] LOM with (nolock)
join [dbo].[LogicalObject] LO with(nolock) on LO.ID = LOM.OBJECTID
join [db2].[dbo].[JobData] JD with(nolock) on LO.DOCUMENTID = JD.DocumentID
join [db2].[dbo].[TaskData] TD with(nolock) on JD.ID = TD.ParentID
join [db2].[dbo].[RecognitionData] RD with(nolock) on TD.ID = RD.ID
where LOM.[Source] = 'MANUFAST_AVR_DNN_QA'
and LOM.[ScanDate] > '2018-10-01'
and LOM.[ScanDate] < '2018-10-16'
and RD.[ProcessorType] IN ('F05AM','F06','F08','F09','F11','F12A')但是,在同一列中混合数据类型可能是不可取的,因为在这些数据中混合了非日期值时,您将无法以聚合或分析的方式对这些日期做任何用途。
发布于 2018-10-17 15:02:11
最重要的一点是,您不能有一个列有时是日期/时间,有时不是。列有固定的类型。
您可以通过某些字符串操作将字符串转换为日期。这将创建一个日期列:
select (case when ProcessorType = 'F05AM'
then convert(date, '20' + right(ProcessorResult, 2) + substring(ProcessorResult, 3, 2) + left(ProcessorResult, 2))
end)你只想要一个看起来像约会的字符串,所以我会这样做:
select (case when ProcessorType = 'F05AM'
then '20' + right(ProcessorResult, 2) + substring(ProcessorResult, 3, 2) + left(ProcessorResult, 2)
else ProcessorResult
end)https://stackoverflow.com/questions/52857553
复制相似问题