Sql server SQL查询在加入时将nvarchar转换为datetime
我有两个表,其中包含事件类型信息。一个具有正确设置的日期和时间戳,即使用datetime,另一个具有nvarchar。 我无法更改列定义 我想在一个包含两个时间戳列的查询中连接这些表 我这里有一把sql小提琴: 我认为这会奏效:Sql server SQL查询在加入时将nvarchar转换为datetime,sql-server,sql-server-2008,datetime,join,Sql Server,Sql Server 2008,Datetime,Join,我有两个表,其中包含事件类型信息。一个具有正确设置的日期和时间戳,即使用datetime,另一个具有nvarchar。 我无法更改列定义 我想在一个包含两个时间戳列的查询中连接这些表 我这里有一把sql小提琴: 我认为这会奏效: select Event1.Col1, Event1.EventDateTime1, Event2.Col2, convert(datetime,Event1.EventDateTime1,121) as EventDateTime21 from Even
select
Event1.Col1, Event1.EventDateTime1,
Event2.Col2, convert(datetime,Event1.EventDateTime1,121) as EventDateTime21
from Event1 FULL OUTER JOIN EVENT2
on Event1.EventDateTime1 = EventDateTime21
但是我的sql基础知识让我失望
如何使我的专栏EventDateTime21存在
任何帮助都会很好
谢谢
Der这假设所有字符串都是有效日期:
from A inner join B on cast(B.date_column as datetime) = A.date_column
根据您的小提琴,一种可能的通信方式是:
select *
from Event1 e1 inner join Event2 e2
on e2.Col2 = stuff(e1.Col1, 4, 0, 'X')
使用时间戳的另一种可能性是:
with e1 as (
select *, row_number() over (order by EventDateTime1) as rn
), e2 as (
select *, row_number() over (order by EventDateTime2) as rn
)
select *
from e1 inner join e2
on e2.rn = e1.rn
编辑:更新问题并对接受的答案发表评论后:
我想你真的想要一个联盟。它将比包含两个从不匹配的列的联接和联接条件中的强制转换快得多
select Col1 as Col, EventDateTime1 as EventDateTime from Event1
union all
select Col2, convert(datetime, EventDateTime2, 121) from Event2
您应该使用
CONVERT
,这样您就可以使用正确的数据格式(在本例中为121):
无论如何,日期不匹配,因此查询结果为零检查数据它们是不同的(没有直接匹配)@shawnt00这是一个noob问题,但是如果我使用SQL Builder在SQL Server 2008中进行查询,我如何构造联合?如果你想忽略这个,我会继续搜索!再次感谢。我的数据库实际上有很多这样的事情发生。有时候那些查询构建器不允许您进行联合。有时它仍然会表示一个查询,而这个查询是无法通过接口生成的。因此,您应该能够在SQL窗格中删除SQL,尽管在这一点上您可能无法编辑很多。查看小提琴:时间是不同的,初始列在中间有一个“X”。这些行是如何对应的?谢谢!我想在一个视图中显示来自两个不同日志的事件,所以我使用完全外部连接。
SELECT *
FROM dbo.Event1 E1
INNER JOIN dbo.Event2 E2
ON E1.EventDateTime1 = CONVERT(DATETIME,E2.EventDateTime2,121);